N'utilisez pas null, utilisez facultatif
Comme vous l'avez souligné, l'un des plus gros problèmes avec nullJava est qu'il peut être utilisé partout , ou du moins pour tous les types de référence.
Il est impossible de dire ce qui pourrait être nullet ce qui ne pourrait pas l'être.
Java 8 contient un bien meilleur motif: Optional.
Et un exemple d'Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
Si chacune d'elles peut ou non retourner une valeur réussie, vous pouvez changer les API en Optionals:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
En encodant explicitement le caractère facultatif du type, vos interfaces seront bien meilleures et votre code sera plus propre.
Si vous n'utilisez pas Java 8, vous pouvez regarder com.google.common.base.Optionaldans Google Guava.
Une bonne explication par l'équipe de Guava: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
Une explication plus générale des inconvénients à null, avec des exemples de plusieurs langues: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nonnull, @Nullable
Java 8 ajoute ces annotations pour aider les outils de vérification de code comme les IDE à détecter les problèmes. Leur efficacité est assez limitée.
Vérifiez quand cela a du sens
N'écrivez pas 50% de votre code en vérifiant null, en particulier s'il n'y a rien de sensé que votre code puisse faire avec une nullvaleur.
D'un autre côté, s'il nullpourrait être utilisé et signifier quelque chose, assurez-vous de l'utiliser.
En fin de compte, vous ne pouvez évidemment pas supprimer nullde Java. Je recommande fortement de remplacer l' Optionalabstraction autant que possible et de vérifier nullces autres fois que vous pouvez faire quelque chose de raisonnable à ce sujet.