N'utilisez pas null, utilisez facultatif
Comme vous l'avez souligné, l'un des plus gros problèmes avec null
Java 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 null
et 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 Optional
s:
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.Optional
dans 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 null
valeur.
D'un autre côté, s'il null
pourrait être utilisé et signifier quelque chose, assurez-vous de l'utiliser.
En fin de compte, vous ne pouvez évidemment pas supprimer null
de Java. Je recommande fortement de remplacer l' Optional
abstraction autant que possible et de vérifier null
ces autres fois que vous pouvez faire quelque chose de raisonnable à ce sujet.