Я регулярно использовал инструменты генерации кода Eclipse (Source/Generate hashCode() и equals()...), чтобы создать реализацию equals() для простых классов POJO. Если я выбираю "Использовать instanceof для сравнения типов", это приводит к реализации equals(), аналогичной следующей:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof MyClass)) {
return false;
}
MyClass other = (MyClass) obj;
// check the relevant fields for equality
}
Сегодня коллега отметил, что второй оператор if вообще не нужен, поскольку проверка типа instanceof вернет false всякий раз, когда obj равно null. (См. вопрос 3328138.)
Теперь я думаю, что люди, пишущие шаблоны кода для Eclipse JDT, тоже заслуживают своей соли. Поэтому я полагаю, что для этой нулевой проверки должна быть какая-то причина, но я не уверен, что это такое?
(Также вопрос 7570764 может дать подсказку: если мы используем сравнение getClass() для проверки типов, то instanceof, obj.getClass() не является нулевым. шаблон кода просто недостаточно умен, чтобы опустить нулевую проверку, если мы используем instanceof.)
EDIT: Драган заметил в своем ответе, что проверка типа instanceof не является настройкой по умолчанию в Eclipse, поэтому я отредактировал это без вопросов. Но это ничего не меняет.
Также не рекомендуется использовать getClass() или (даже лучше!) другую среду IDE. Это не вопрос, который не отвечает на вопрос. Я не просил совета относительно того, как написать реализацию equals(), использовать ли instanceof или getClass() и т.д.
Вопрос примерно таков: это незначительная ошибка в Eclipse? И если это не так, то почему это квалифицируется как функция?