Wieso wird in der automatisch generierten equals-Methode in Java das übergebene Objekt gecastet?
Hier das Codebeispiel:
@Override
public boolean equals(Adresse a) {
if (this == a) return true; //wenn exakt gleich
if (a == null || getClass() != a.getClass()) return false; //wenn null oder nicht gleiche Klasse, dann nicht gleich
Adresse adresse = (Adresse) a;//gecastet zum gleichen Typ
return hausnummer == adresse.hausnummer && postleitzahl == adresse.postleitzahl && Objects.equals(strasse, adresse.strasse);
}
Warum wird a gecastet zum Typ Adresse? Warum ist das notwendig?
Diese equals-Methode ist automatisch so generiert in IntelliJ. Ziel ist es, ein Objekt der Klasse Adresse mit einem anderen Objekt der Klasse Adresse zu vergleichen und herauszufinden, ob diese sich entsprechen.
3 Antworten
Automatisch generierter Code ist häufig nicht durchoptimiert.
Wenn ich richtig liege, ist es überhaupt nicht notwendig, die Variable adresse einzuführen. Man könnte direkt mit a weiterarbeiten.
Gute Überlegung. Dann müsste man Object zu Adresse casten.
Ich weiß nur nicht, ob er schon im Typvergleich aussteigen würde.
der macht das um die felder vom objekt mit den feldern von this zu vergleichen
sonst würde im normalfall a.hausnummer == hausnummer nicht funktionieren
in dem fall macht es keinen sinn, aber eigentlich überschreibt man die equals methode mit einem Object parameter und nicht einem spezifischen
kurzgesagt die equals methode wurde falsch überschrieben
Hey,
wie du glaube ich schon selbst erkannt hast, ist der Parameter der equals() Methode eigentlich vom Typ Object. Ist dies der Fall, ist der Cast natürlich notwenig. Da hier der Typ aber bereits definiert ist, ist der Cast redundant und könnte entfernt werden.
Mfg Jannick (L1nd)
wäre es nötig, wenn man statt Adresse a Object o übergeben würde?