Этот вопрос специально связан с переопределением метода equals() для объектов с большим количеством полей. Во-первых, позвольте мне сказать, что этот большой объект нельзя разбить на несколько компонентов, не нарушая принципов OO, поэтому говорить, что «класс не должен иметь больше полей x» не поможет.Java equals(): отражать или не отражать
Продолжая, проблема пришла в себя, когда я забыл проверить одно из полей на равенство. Поэтому мой метод equals был неправильным. Тогда я думал использовать отражение:
--code removed because it was too distracting--
Цель этого поста не обязательно реорганизовать код (это даже не код, я использую), но вместо того, чтобы получить вход от того, или нет это хорошая идея.
Плюсы:
- Если новое поле добавляется, он автоматически включается
- метод гораздо более лаконична, чем 30 если заявления
Минусы:
- Если новое поле добавляется, он автоматически включается, иногда это нежелательно
- Производительности: Это должно быть медленнее, я не чувствую потребность вырваться профилировщиком
- Whitelisting определенных полей игнорировать в сравнение немного уродливое
Любые мысли?
Все поля являются строками или примитивами @ P.S. Это уже делалось, но не повредить, чтобы напомнить всем! @ P.P.S. Я знал, что там должно быть что-то. Я использовал ToStringBuilder, я понятия не имею, как я их игнорировал. Настоящий вопрос состоит в том, чтобы отражать или не отражать. – oreoshake 2008-09-23 23:52:05
Это зависит от того, что, по вашему мнению, наиболее вероятно: добавление поля и забывание добавить его к equals() или добавление поля, которое вы не хотите и/или не можете использовать в автоматическом сравнении, хотя использование аннотации может помочь , Вы можете рассмотреть что-то вроде flexjson и сравнить результат каждого объекта. – 2008-09-24 01:19:18
Эти строители довольно круты. – 2008-09-24 11:45:56