Creo que he leído en algún lugar personas que generan métodos equals/hashcode/toString durante el tiempo de compilación (usando APT) identificando qué campos deben ser parte de la prueba hash/equality. No pude encontrar nada de eso en la web (que podría haber soñado?) ...Generando equals/hashcode/toString usando la anotación
que se podía hacer así:
public class Person {
@Id @GeneratedValue private Integer id;
@Identity private String firstName, lastName;
@Identity private Date dateOfBirth;
//...
}
Para que una entidad (por lo que queremos exlude algunos campos, como el id).
O como una clase caso Scala, es decir, un objeto de valor:
@ValueObject
public class Color {
private int red, green, blue;
}
No sólo el archivo se vuelve más legible y más fácil de escribir, pero también ayuda a asegurar que todos los atributos son parte de los Iguales/código hash (en caso de que agregue otro atributo más adelante, sin actualizar los métodos en consecuencia).
Escuché que APT no está muy bien soportado en IDE, pero no lo veo como un problema importante. Después de todo, las pruebas son ejecutadas principalmente por servidores de integración continua.
Alguna idea si esto ya se ha hecho y si no es así por qué? Gracias
enfoque interesante. Me pregunto cuál es el impacto en el rendimiento. –