Esta pregunta está específicamente relacionada con anular el método equals() para objetos con una gran cantidad de campos. En primer lugar, permítanme decir que este gran objeto no se puede dividir en varios componentes sin violar los principios de OO, por lo que decirme "ninguna clase debe tener más de x campos" no ayudará.Java es igual a(): para reflejar o no para reflejar
Avanzando, el problema se concretó cuando olvidé comprobar uno de los campos por igualdad. Por lo tanto, mi método equals fue incorrecto. Entonces pensé en utilizar la reflexión:
--code removed because it was too distracting--
El objetivo de este post no es necesariamente refactorizar el código (esto no es ni siquiera el código que estoy utilizando), pero en lugar de obtener el aporte de si es o no es una buena idea.
Pros:
- Si se añade un nuevo campo, se incluye automáticamente
- El método es mucho más concisa de 30 sentencias if
Contras:
- Si se añade un nuevo campo, que se incluye de forma automática, a veces esto no es deseable
- Rendimiento: Esto tiene que ser más lento, no me siento la necesidad de romper con un perfilador
- listas blancas ciertos campos de ignorar en el la comparación es un poco fea
¿Alguna idea?
Todos los campos son cadenas o primitivas @ P.S. ¡Ya lo hice, pero no está de más recordarlo a todos! @ P.P.S. Sabía que tenía que haber algo allí afuera. Había estado usando ToStringBuilder, no tengo idea de cómo los pasé por alto. La verdadera pregunta es reflejar o no reflexionar. – oreoshake
Depende de lo que piense que es más probable: agregar un campo y olvidarse de agregarlo a equals() o agregar un campo que no quiere y/o no puede usar en la comparación automática, aunque usar una anotación podría ayudar . Puede considerar algo como flexjson y comparar la salida de cada objeto. –
Esos constructores son geniales. –