Задать вопрос
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.
  • Вопрос задан
  • 2547 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
Решения вопроса 1
@eyeless_watcher
Вместо
if(!(arg instanceof A)) return false;
стоит явно сравнивать классы
if (getClass() != arg.getClass()) return false;
Плюс не хватает проверки на то, что arg не является null.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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