Verwenden Sie nicht null, sondern optional
Wie Sie bereits betont haben, besteht eines der größten Probleme nullin Java darin, dass es überall oder zumindest für alle Referenztypen verwendet werden kann.
Es ist unmöglich zu sagen, dass das sein könnte nullund was nicht sein könnte.
Java 8 bietet eine viel bessere Muster: Optional.
Und ein Beispiel von Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
Wenn jeder dieser Werte einen erfolgreichen Wert zurückgibt oder nicht, können Sie die APIs in Optionals ändern :
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Durch die explizite Codierung von Optionalität im Typ werden Ihre Schnittstellen viel besser und Ihr Code wird sauberer.
Wenn Sie nicht Java 8 verwenden, können Sie com.google.common.base.Optionalin Google Guava nachsehen .
Eine gute Erklärung vom Guava-Team: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
Eine allgemeinere Erklärung der Nachteile gegen Null mit Beispielen aus mehreren Sprachen: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nonnull, @Nullable
Java 8 fügt diese Annotation hinzu, um Tools zur Codeüberprüfung wie IDEs beim Erkennen von Problemen zu unterstützen. Sie sind in ihrer Wirksamkeit ziemlich begrenzt.
Prüfen Sie, wann es Sinn macht
Schreiben Sie nicht 50% Ihres Codes und überprüfen Sie null, insbesondere wenn es nichts Sinnvolles gibt, das Ihr Code mit einem nullWert tun kann.
Auf der anderen Seite sollten Sie nullsicherstellen, dass Sie etwas verwenden , wenn es verwendet werden könnte und etwas bedeutet.
Letztendlich kann man nullJava natürlich nicht entfernen . Ich empfehle nachdrücklich, die OptionalAbstraktion zu ersetzen, wann immer dies möglich ist, und zu überprüfen null, ob Sie in anderen Fällen etwas Vernünftiges tun können.