Tengo una entidad que hereda de otra. Por otro lado, estoy usando el proyecto lombok para reducir el código repetitivo, así que puse una @Data
anotación. La anotación @Data
con herencia produce la siguiente advertencia:
Generando implementación equals / hashCode pero sin una llamada a superclase, aunque esta clase no extiende java.lang.Object. Si esto es intencional, agregue
@EqualsAndHashCode(callSuper=false)
a su tipo.
¿Es recomendable agregar anotación @EqualsAndHashCode (callSuper = true)
o @EqualsAndHashCode (callSuper = false)
? Si no se agrega, ¿cuál es callSuper=false
o callSuper=true
?
@EqualsAndHashCode(callSuper=true)
debería resolver la advertencia.fuente
@EqualsAndHashCode
resuelve la advertencia.La principal pregunta original es:
La respuesta aceptada es básicamente solo:
Para ampliar eso, la documentación sobre @EqualsAndHashCode tiene una guía sólida sobre la cual elegir. Especialmente esto, en mi humilde opinión:
Para resumir un poco esto: Elija 'callSuper = true' si está heredando de una superclase que no tiene información de estado, o está usando la anotación @Data, o tiene implementaciones de equals / hash que "manejan la situación correctamente" - lo que interpreto que significa devolver un hash adecuado de los valores del estado.
fuente
Si también desea comparar los miembros de la superclase, utilice
@EqualsAndHashCode(callSuper=true)
. Sin embargo, si solo desea comparar campos en la clase actual, puede usar@EqualsAndHashCode(callSuper=false)
la opción predeterminada .Si usa la función Delombok , puede ver que la diferencia es que cuando se establece en
true
esta línea se agrega al método igual generadoif (!super.equals(o)) return false;
. Si tiene miembros en la superclase que deben tenerse en cuenta al comparar dos objetos, entonces debe establecerse en verdadero para comparar correctamente.fuente