Heim >Java >javaLernprogramm >„getClass()' vs. „instanceof' in „equals()': Was sollten Sie verwenden?
Sollten Sie „getClass()“ oder „instanceof“ in Ihrer .equals()-Methode verwenden?
Beim Generieren von .equals() Bei Verwendung von Eclipse-Methoden haben Sie die Möglichkeit, zum Vergleichen von Typen „instanceof“ oder „.getClass()“ zu verwenden. Standardmäßig verwendet Eclipse „.getClass()“, sodass sich viele Programmierer fragen, ob sie zu „instanceof“ wechseln sollten.
Was ist der Unterschied?
.getClass() vergleicht direkt den Laufzeittyp zweier Objekte, während instanceof prüft, ob ein Objekt vorhanden ist ist eine Instanz einer bestimmten Klasse oder Schnittstelle. Zum Beispiel:
if (getClass() != obj.getClass()) // Using getClass() if (!(obj instanceof MyClass)) // Using instanceof
Welches sollten Sie verwenden?
Laut Java-Experte Josh Bloch ist „instanceof“ der bevorzugte Ansatz, da es keine Einschränkungen gibt Gleichheit mit dem gleichen Laufzeittyp. Dies bedeutet, dass Sie eine Klasse erweitern und Methoden hinzufügen können, ohne die Gleichheit von Objekten zu beeinträchtigen, die dieselben wichtigen Aspekte aufweisen.
Darüber hinaus entspricht es dem Liskov-Substitutionsprinzip, das besagt, dass eine Unterklasse verwendet werden können sollte anstelle seiner Superklasse, ohne den Code zu beschädigen. Die Verwendung von „.getClass()“ verstößt gegen dieses Prinzip und führt zu unerwartetem Verhalten in Sammlungen wie HashTable.
Zusammenfassend bietet „instanceof“ mehr Flexibilität und wird für .equals()-Methoden empfohlen. Während Sie die Prüfung „if (obj == null)“ mit „instanceof“ entfernen können, ist es im Allgemeinen aus Gründen der Klarheit und Vollständigkeit ratsam, sie beizubehalten.
Das obige ist der detaillierte Inhalt von„getClass()' vs. „instanceof' in „equals()': Was sollten Sie verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!