Non utilizzare null, usa Facoltativo
Come hai notato, uno dei maggiori problemi con null
in Java è che può essere usato ovunque , o almeno per tutti i tipi di riferimento.
È impossibile dire che potrebbe essere null
e cosa non potrebbe essere.
Java 8 introduce uno schema molto migliore: Optional
.
E esempio da Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
Se ognuno di questi valori può restituire o meno un valore corretto, puoi modificare le API in Optional
s:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Codificando esplicitamente le opzioni nel tipo, le tue interfacce saranno molto migliori e il tuo codice sarà più pulito.
Se non stai utilizzando Java 8, puoi guardare com.google.common.base.Optional
in Google Guava.
Una buona spiegazione del team di Guava: link
Una spiegazione più generale degli svantaggi di null, con esempi tratti da più lingue: link
@Nonnull, @Nullable
Java 8 aggiunge queste annotazioni per aiutare gli strumenti di controllo del codice come IDE a individuare problemi. Sono abbastanza limitati nella loro efficacia.
Controlla quando ha senso
Non scrivere il 50% del tuo codice che controlla null, in particolare se non c'è nulla di sensato che il tuo codice possa fare con un valore di null
.
D'altra parte, se null
può essere usato e significa qualcosa, assicurati di usarlo.
In definitiva, ovviamente non puoi rimuovere null
da Java. Raccomando vivamente di sostituire l'astrazione Optional
ogni volta che è possibile e di controllare null
quelle altre volte in cui puoi fare qualcosa di ragionevole a riguardo.