7 Stimmen

Anforderung oder Prinzip der Nicht-Nullität

Ich habe gerade in Effective Java gelesen, dass das fünfte Prinzip der equals()-Methode besagt, dass alle Objekte ungleich zu null sein müssen. Das Buch behauptet weiterhin, dass einige Klassen, die von Programmierern geschrieben wurden, dies durch einen expliziten Test für null verhindern:

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

Laut Effective Java ist der obige Test auf Nicht-Null unnötig. Meine Frage ist jedoch, warum testen dann so viele Programmierer auf diese Nicht-Null-Anforderung?

8voto

Joonas Pulakka Punkte 35583

Sie können das mit einem instanceof-Test tun:

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

null ist keine Instanz von irgendetwas, also funktioniert das.

2voto

stinepike Punkte 52921
Object erstesObjekt = null;
zweitesObjekt.equals(erstesObjekt);

wie kann man das verhindern?? Wenn Sie es nicht überprüfen null bevor Sie es verwenden, wird es abstürzen. Ich denke, Sie müssen auch den Klassentyp überprüfen wie folgt

        if (anderes == null || anderes.getClass() != this.getClass()) {
           return false;
        }

0voto

Navs Punkte 109

Um eine NullPointerException zu verhindern, wenn equals() aufgerufen wird.

0voto

rs' Punkte 301

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

alte Gewohnheiten aus anderen Sprachen

nicht vertraut zu sein mit dem von Ihnen erwähnten Prinzip

Bibliotheken, die Nullzeiger Ausnahmen werfen können (Sie können nicht garantieren, dass jemand anderes etwas Dummes gemacht hat!)

wenn Sie ein paar verschachtelte Befehle haben, die nur für eine nicht null Instanz Ihres Objekts ausgewertet werden müssen, möchten Sie vielleicht umgehen

0voto

Harish Kumar Punkte 528

Es gibt viele Praktiken, die in der Branche vorgeschlagen werden, um unnötige Überprüfungen oder Fallstricke im Code zu vermeiden. Tatsache ist jedoch, dass Fehler passieren können oder es Situationen geben kann, die man nicht kontrollieren kann, wie z.B. Daten, die von einem Drittanbietersystem kommen und Werte fehlen, die das eigene System erwartet. Daher sind Überprüfungen erforderlich. Die Welt ist nicht perfekt!!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X