переопределение метода equals из суперкласса - PullRequest
0 голосов
/ 19 октября 2019

Новая реализация метода hashcode (), необходимая, когда мы переопределяем метод equals () из суперкласса. Контракт между equals () и hashcode () сохраняется.

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Методы equals и hashCode будут (как и любой другой метод) унаследованы от суперкласса.

Если они все еще подходят для подкласса, вы можете оставить это как есть.

В JDK есть примеры для этого:

  • Stack расширяет Vector расширяет AbstractList
  • Stack просто наследует equals от Vector
  • Vector переопределяет equals из AbstractList, но только для добавления synchronized, а затем просто вызывает super.equals.
  • ArrayList также расширяет AbstractList, но этопереопределяет equals реализацией, которая следует той же логике, но может быть более эффективной, потому что она знает, что по крайней мере один из участников является ArrayList.

Но имейте в виду, что

  • теперь вы будете сравнивать экземпляры Super <-> Super, Super <-> Sub, Sub <-> Sub во всех комбинациях с одним и тем же фрагментом кода
  • , например this.getClass()может возвращать неожиданные вещи, когда this действительно может быть подклассом

Если это вызывает проблемы в вашейЛогика сравнения зависит от вас.

0 голосов
/ 19 октября 2019

Контракт между методами equals и hashcode необходимо соблюдать, когда вы собираетесь использовать этот класс в коллекциях на основе хеширования, таких как hashmap, hashset и т. Д., В которых для вычисления индекса хеша используется метод hashcode, а для проверки равенства - метод equals. В противном случае вы можете игнорировать хэш-код. Пожалуйста, обратитесь к URL ниже для получения дополнительной информации о равных и переопределении метода хэш-кода в hashmap. https://www.thetechnojournals.com/2019/10/why-hashmap-key-should-be-immutable-in.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...