natomist
@natomist

Как правильно реализовать методы equals и hashCode для классов которые наследуются друг от друга в Java?

Допустим некто разработал класс А и реализовал для него следующий метод equals:
public boolean equals(Object arg) {
    if (this == arg)
      return true;
    if(!(arg instanceof A))
      return false;
    return [сравниваем поля класса A]
  }


Кто-то другой создал класс B, который наследуется от A и реализовал для него аналогичный метод equals.
И теперь у нас может возникнуть ситуация, когда a.equals(b) == true, потому что подмножество полей класса A совпадает у обоих объектов, а hashCode обоих объектов будет разным.
При противоположном сравнении b.equals(a) всегда будет ложь, потому что это объекты разных типов. Т.е. у нас нарушается симметричность метода equals.
  • Вопрос задан
  • 2542 просмотра
Решения вопроса 1
@eyeless_watcher
Вместо
if(!(arg instanceof A)) return false;
стоит явно сравнивать классы
if (getClass() != arg.getClass()) return false;
Плюс не хватает проверки на то, что arg не является null.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы