No use nulo, use Opcional
Como ha señalado, uno de los mayores problemas con nullJava es que puede usarse todas partes , o al menos para todos los tipos de referencia.
Es imposible decir que podría ser null y qué no podría ser.
Java 8 presenta un patrón mucho mejor: Optional .
Y ejemplo de 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 cada uno de estos puede o no devolver un valor exitoso, puede cambiar las API a Optionals:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Al codificar explícitamente la opcionalidad en el tipo, sus interfaces serán mucho mejores y su código será más limpio.
Si no está utilizando Java 8, puede mirar com.google.common.base.Optional en Google Guava.
Una buena explicación del equipo de Guava: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
Una explicación más general de las desventajas de nulo, con ejemplos de varios idiomas: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nonnull, @Nullable
Java 8 agrega estas anotaciones para ayudar a las herramientas de verificación de código como IDE a detectar problemas. Son bastante limitados en su efectividad.
Comprueba cuándo tiene sentido
No escriba el 50% de su código comprobando nulo, especialmente si no hay nada sensato que su código pueda hacer con un nullvalor.
Por otro lado, si nullpudiera usarse y significar algo, asegúrese de usarlo.
En última instancia, obviamente no puede eliminar nullde Java. Recomiendo sustituir la Optionalabstracción siempre que sea posible, y comprobar nullesas otras veces que puede hacer algo razonable al respecto.