Ich habe eine Entität, die von anderen erbt. Auf der anderen Seite verwende ich das Lombok-Projekt, um den Boilerplate-Code zu reduzieren, also füge ich @Data
Anmerkungen hinzu. Die Annotation @Data
mit Vererbung erzeugt die nächste Warnung:
Generieren der Implementierung von equals / hashCode, jedoch ohne Aufruf der Oberklasse, obwohl diese Klasse java.lang.Object nicht erweitert. Wenn dies beabsichtigt ist, fügen Sie
@EqualsAndHashCode(callSuper=false)
es Ihrem Typ hinzu.
Ist es ratsam, Anmerkungen hinzuzufügen @EqualsAndHashCode (callSuper = true)
oder @EqualsAndHashCode (callSuper = false)
? Wenn es nicht hinzugefügt wird, welches ist es callSuper=false
oder callSuper=true
?
@EqualsAndHashCode(callSuper=true)
sollte die Warnung beheben.quelle
@EqualsAndHashCode
die Warnung behoben wird.Die ursprüngliche Hauptfrage lautet:
Die akzeptierte Antwort lautet im Grunde nur:
Um dies zu erweitern, enthält die Dokumentation zu @EqualsAndHashCode eine solide Anleitung zur Auswahl. Besonders das, IMHO:
Um dies ein wenig zu reduzieren: Wählen Sie 'callSuper = true', wenn Sie von einer Oberklasse erben, die entweder keine Statusinformationen enthält oder selbst die Annotation @Data verwendet oder Implementierungen von equals / hash verwendet, die "die Situation richtig handhaben". - was ich so interpretiere, dass ein korrekter Hash der Zustandswerte zurückgegeben wird.
quelle
Wenn Sie auch die Mitglieder der Oberklasse vergleichen möchten, verwenden Sie
@EqualsAndHashCode(callSuper=true)
. Wenn Sie jedoch nur Felder in der aktuellen Klasse vergleichen möchten, können Sie diese verwenden.@EqualsAndHashCode(callSuper=false)
Dies ist die Standardoption .Wenn Sie die Verwendung Delombok -Feature können Sie sehen , dass der Unterschied , dass, wenn zu setzen
true
diese Linie wird auf die erzeugte hinzugefügt equals Methodeif (!super.equals(o)) return false;
. Wenn Sie Mitglieder in der Oberklasse haben, die beim Vergleich zweier Objekte berücksichtigt werden sollten, muss sie auf true gesetzt werden, um einen korrekten Vergleich zu ermöglichen.quelle