Является ли equals () должен быть рекурсивным/глубоким?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Является ли equals () должен быть рекурсивным/глубоким?

Сообщение Anonymous »

никто на самом деле не говорит об этом аспекте equals () и hascode () , но потенциально оказывает огромное влияние на equals () и hashcode () поведение. Массив, когда дело с немного более сложными объектами, ссылающимися на другие объекты. Все его примеры - это тривиальности, такие как точка и цветная точка, все с примитивными или почти примитивными типами. < /P>

может избежать рекурсивности? Иногда вряд ли. Предположим: < /p>

Код: Выделить всё

Person {
String name;
Address address;
}
Обе поля должны перейти к Business Key (как называют парни из Hibernate), они оба компоненты значения (как у Джошуа Блоха это). И адрес - это сложный объект. Рекурсия. < /P>

Имейте в виду, идентификаторы, как Eclipse и Intellij, генерирует рекурсивные equals () и hashcode ().
Они по умолчанию используют все поля. Если вы применяете инструменты генератора массой, вы спрашиваете проблемы. Здесь мой простой тест доказывал его.

все необходимо, - это класс, который имеет в качестве «компонента значения» другой объект, формирование графа объекта и рекомендованная реализация (). Да, вам нужен график в этом цикле, но это ничего нереально (представьте себе молекулы, пути на карте, взаимосвязанные транзакции ..). < /P>

Другая проблема - производительность . То, что рекомендуется для equals (), на самом деле сравнивает два графа объектов, потенциально огромные графики, можно в итоге сравнить тысячи узлов, не зная об этом. И не все из них необходимы в памяти! Считайте, что некоторые объекты могут быть ленивыми нагрузками. Можно в конечном итоге загружать половину базы данных на один equals () или hashcode () вызов. Как вам рекомендуется сделать, чем больше вероятность того, что у вас возникнут проблемы.

Подробнее здесь: https://stackoverflow.com/questions/160 ... rsive-deep
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»