[Read Effective Java] Kapitel 3 Punkt 8 "Wenn Sie gleich überschreiben, befolgen Sie den allgemeinen Vertrag"

Über Kapitel 3

Kapitel 2 war die Essenz der Objekterstellung und des Verschwindens. Kapitel 3 befasst sich mit der Klasse "Objekt".

Generalvertrag mit Objektklasse

-Object wurde hauptsächlich entwickelt, um erweitert zu werden, obwohl es sich um eine konkrete Klasse handelt · Alle nicht endgültigen Methoden (equals, hashCode, toString, clone, finalize) sind so konzipiert, dass sie überschrieben werden, sodass sie einen expliziten allgemeinen Vertrag haben.

Befolgen Sie den allgemeinen Vertrag, wenn Sie gleich überschreiben

Wenn die Methode equals nicht überschrieben werden darf

Das Überschreiben der equals-Methode ist einfach, aber es ist oft die falsche Methode, sie zu überschreiben. Es ist daher am besten, sie nicht zu überschreiben, wenn eine der folgenden Bedingungen erfüllt ist:

· Wenn einzelne Instanzen der Klasse von Natur aus eindeutig sind

· Wenn Sie nicht daran interessiert sind, ob die Klasse eine Prüfung der "logischen Gleichheit" bietet

· Wenn die Oberklasse bereits gleich überschrieben hat und das Verhalten der Oberklasse für diese Klasse geeignet ist

· Wenn die Klasse privat oder paketprivat ist und Sie sicher sind, dass ihre Methode equals niemals aufgerufen wird

Generalvertrag

Das Folgende ist der allgemeine Vertrag für die Gleichheitsmethode. Wenn dies nicht befolgt wird, verhält sich das Programm unregelmäßig oder stürzt ab.

Die Implementierung der Methode equals implementiert eine Äquivalenzbeziehung. Das ist, Reflexiv: x.equals (x) muss für jeden Nicht-Null-Referenzwert x true zurückgeben · Symmetrisch: x.equals (y) darf nur dann true zurückgeben, wenn y.equals (x) für alle Nicht-Null-Referenzwerte x und y true zurückgibt. Transitiv: Für jeden Nicht-Null-Referenzwert x, y, z, wenn x.equals (y) und y.equals (z) true zurückgeben, dann x.equals (z) Muss true zurückgeben · Konsistent: Für alle Nicht-Null-Referenzwerte x und y sind mehrere Aufrufe von x.equals (y) durchgehend konsistent, es sei denn, die zum Vergleichen verwendeten Informationen entsprechen dem Objekt. Muss entweder true oder konsistent false zurückgeben

Fortsetzen

[Read Effective Java] Kapitel 3 Punkt 9 "Wenn Sie equals überschreiben, überschreiben Sie immer hashCode" https://qiita.com/Natsukii/items/ac195b5542ba3348ed29

Recommended Posts

[Read Effective Java] Kapitel 3 Punkt 8 "Wenn Sie gleich überschreiben, befolgen Sie den allgemeinen Vertrag"
[Read Effective Java] Kapitel 3 Punkt 9 "Wenn Sie equals überschreiben, überschreiben Sie immer hashCode"
[Read Effective Java] Kapitel 2 Punkt 7 "Vermeiden Sie Finalizer"
[Read Effective Java] Kapitel 2 Punkt 5 "Vermeiden Sie die Erstellung unnötiger Objekte"
[Read Effective Java] Kapitel 3 Punkt 12 "Berücksichtigung der Implementierung von Comparable"
[Read Effective Java] Kapitel 2 Punkt 6 "Veraltete Objektreferenzen entfernen"
[Read Effective Java] Kapitel 2 Punkt 4 "Unmöglichkeit der Instanziierung mit privatem Konstruktor erzwingen"
[Read Effective Java] Kapitel 2 Punkt 2 "Betrachten Sie einen Builder, wenn Sie mit einer großen Anzahl von Konstruktorparametern konfrontiert werden."
Effektives Java 3rd Edition Kapitel 9 Programm Allgemein
[Read Effective Java] Kapitel 2 Punkt 1 "Betrachten Sie statische Factory-Methoden anstelle von Konstruktoren"
Effektives Java Kapitel 2
Effektives Java Kapitel 6 34-35
Effektives Java Kapitel 4 15-22
Effektives Java Kapitel 3
[Read Effective Java] Kapitel 2 Punkt 3 "Singleton-Eigenschaften mit privatem Konstruktor oder Aufzählungstyp erzwingen"