Heim >Java >javaLernprogramm >Warum schlägt das Überschreiben meiner Java-Methode „equals()' bei Sammlungen fehl?
Überschreibung der Equals()-Methode in Java: Ein verwirrendes Problem wurde gelöst
Beim Überschreiben der Methode equal() in Java können unerwartete Herausforderungen auftreten. In diesem Artikel geht es um einen besonderen Fall, bei dem die Methode eine Fehlfunktion hatte, was zu einem frustrierenden Debugging-Erlebnis führte.
Kurz gesagt, das Problem war auf eine unsachgemäße Überschreibung der Methode equal() zurückzuführen. Konkret wurde die Methode mit einem Parameter vom Typ Book anstelle von Object definiert, wie es die von der Object-Klasse geerbte Methode erfordert.
Das Java Collections Framework, das häufig zur Verarbeitung von Objektsammlungen verwendet wird, verwendet die überschriebenen Equals( ) Methode zur Bestimmung der Gleichheit. Im bereitgestellten Codebeispiel war die überladene equal()-Methode mit dem Book-Parameter jedoch nicht mit diesem Framework kompatibel. Infolgedessen scheiterten Gleichheitsvergleiche innerhalb der Sammlung aus unerklärlichen Gründen.
Um diese Verwirrung zu beheben, muss die Methode equal() wie folgt korrekt überschrieben werden:
@Override public boolean equals(Object other) { if (other == null) return false; if (other == this) return true; if (!(other instanceof Book)) return false; Book otherBook = (Book) other; ...test other properties here... }
Dieses Codefragment überschreibt die Methode „equals“. ()-Methode aus der Object-Klasse mit einem Parameter vom Typ Object. Darüber hinaus bietet die Annotation @Override eine Prüfung zur Kompilierungszeit, um sicherzustellen, dass die Methode eine Superklassenmethode korrekt überschreibt.
Durch die Behebung dieses subtilen, aber entscheidenden Unterschieds zwischen Überladung und Überschreibung können Programmierer ähnliche Fallstricke vermeiden und eine genaue Gleichheit aufrechterhalten Vergleiche in ihrem Java-Code.
Das obige ist der detaillierte Inhalt vonWarum schlägt das Überschreiben meiner Java-Methode „equals()' bei Sammlungen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!