В двух словах, контракт hashCode согласно объекту Java object.hashCode ():
- Хэш-код не должен меняться, если что-то, влияющее на equals (), не изменится.
- equals () подразумевает, что хеш-коды ==
Предположим, что интерес в первую очередь связан с неизменяемыми объектами данных - их информация никогда не меняется после создания, поэтому предполагается, что № 1 сохраняется. Остается №2: проблема просто в подтверждении того, что равенство подразумевает хэш-код ==.
Очевидно, что мы не можем протестировать каждый мыслимый объект данных, если этот набор не является тривиально маленьким. Итак, как лучше всего написать модульный тест, который может выявить распространенные случаи?
Поскольку экземпляры этого класса неизменяемы, существуют ограниченные способы создания такого объекта; этот модульный тест должен по возможности охватывать их все. Вне моей головы точки входа - это конструкторы, десериализация и конструкторы подклассов (которые должны быть сведены к проблеме вызова конструктора).
[Я попытаюсь ответить на свой вопрос путем исследования. Информация от других StackOverflowers - долгожданный механизм безопасности для этого процесса.]
[Это может быть применимо к другим языкам объектно-ориентированного программирования, поэтому я добавляю этот тег.]