Изменяющийся hashcode

347
09 мая 2017, 03:49

Доброго времени суток.

Столкнулся со следующей проблемой. У меня имеется класс все поля которого изменяемые из вне. Понадобилось переопределить для этого класса метод equals(). Согласно правилу необходимо изменить и метод hashCode(). Но вот проблема: все поля объекта используемые в методе equals() для сравнения часто меняют свои значения и если я буду использовать их для расчета hashCode, то для одного и того же объекта его hashcode будет меняться со временем.

Первый вопрос: как в этом случае следует переопределить hashCode()?

И второй: соблюдать правило: "для одного и того же объекта методе hashCode() должен возвращать одно и тоже значение" нужно только если мы собираемся использовать объекты класса в качестве ключей с коллекциями основанными на хешировании? Иначе это не обязательно?

Answer 1

В описанной Вами ситуации не вижу никакой проблемы. Изменение состояния объекта влечет за собой изменение значения хэшкода, и это нормально, так и должно быть.

По поводу второго вопроса: при переопределении equals() всегда переопределяйте hashCode(), оно, может быть, понадобится не всегда, но если вдруг понадобится, то Вы будете долго искать причину возникшей проблемы, если не переопределите hashCode().

READ ALSO
Как не помещать Activity в стек?

Как не помещать Activity в стек?

У меня в приложении есть NotificationActivity, которая вызывается собственно из NotificationИ после того как она сработала, если пользователь захочет открыть...

339
Получение метода из другого класса

Получение метода из другого класса

Дело, в том, что этот код я использую в одном классеНо мне нужно еще в трех классах этот метод

238
Как вывести результат работы в окно (графический интерфейс) - Java

Как вывести результат работы в окно (графический интерфейс) - Java

Вообщем есть кнопка и текстовое окно, по нажатии этой кнопки выполняется метод fr1watch(); НО, как сделать, чтобы результат работы этого метода...

228
Как правильно пользоваться паттерном PageObject

Как правильно пользоваться паттерном PageObject

Пытаюсь разобраться с паттерном Page object и возник вопрос: Пытаюсь автоматизировать тестирование сайта на котором есть

235