2013-06-04 3 views
7

Ich habe gerade in effektiven Java gelesen, dass das fünfte Prinzip der equals() Methode ist, dass alle Objekte ungleich null sein müssen. Das Buch geht auf zu sagen, dass einige Klassen von Programmierern geschrieben Schutz gegen diesen für null einen expliziten Test:Not-Nichtigkeit Anforderung oder Prinzip

public boolean equals(Object o){ 
    if (o == null) 
     return false; 
    ... 
} 

Nach Effective Java, die oben nicht null Test ist nicht erforderlich. Meine Frage ist jedoch, warum dann so viele Programmierer auf diese Nicht-Nichtigkeits-Anforderung testen?

+3

Sie können nicht darauf vertrauen, dass niemand jemals ein Null-Objekt senden wird ... – vikingsteve

Antwort

8

können Sie tun das mit einem instanceof Test:

public boolean equals(Object o){ 
    if (!(o instanceof MyObject)) 
     return false; 
    ... 
} 

null ist nicht Instanz von irgendetwas, so das funktioniert.

+0

auf jeden Fall besser Antwort verwendet haben +1 – stinepike

+1

Nun, das ist cool. So offensichtlich, dass mir das nie bewusst war. +1, ich würde +2 wenn ich könnte. – Fildor

+0

Natürlich macht das vollkommenen Sinn. Mit dem instanceof-Test überprüfen wir im gleich() -Test automatisch, ob es nicht gleich Null ist. – blackpanther

2
Object firstObject = null; 
secondObject.equals(firstObject); 

Wie können Sie das verhindern ?? Wenn Sie vor der Verwendung von "null" nicht überprüfen, wird es abstürzen. Ich denke, Sie werden auch wie folgt

den Klassentyp überprüfen müssen
 if (other == null || other.getClass() != this.getClass()) { 
      return false; 
     } 
+2

Eigentlich müssen Sie nicht dafür testen. Wir können instanceof als empfohlene Methode in Effective Java verwenden. – blackpanther

+0

Ja absolut, Jonas Antwort hat es deutlich gesagt. Meine Antwort ist eine Alternative, wenn Sie nicht instanceof – stinepike

0

Um ein NullPointerException zu verhindern, wenn equals() genannt wird.

0

mögliche Gründe zu überprüfen:

alten Gewohnheiten aus anderen Sprachen

nicht vertraut sind mit dem Grundsatz Sie

erwähnt

Bibliotheken, die Null-Zeiger-Ausnahmen auslösen können (Sie nicht, dass jemand garantieren kann, sonst hat nichts Dummes getan!)

Wenn Sie einige verschachtelte Befehle haben, die nur für eine Nicht-Null-Instanz Ihres Objekts ausgewertet werden müssen, können Sie

01 umgehen
0

Es gibt viele Praktiken in der Industrie vorgeschlagen, um unnötige Kontrollen oder Fehler im Code zu vermeiden, aber die Tatsache, dass Fehler passieren können oder es Situationen geben kann, die man nicht kontrollieren kann wie Daten von einem Drittsystem mit fehlenden Werten erwarten, dass die Überprüfungen erforderlich sind. Die Welt ist nicht perfekt !!

Verwandte Themen