No use nulo, use Opcional
Como ha señalado, uno de los mayores problemas con null
Java 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 Optional
s:
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 null
valor.
Por otro lado, si null
pudiera usarse y significar algo, asegúrese de usarlo.
En última instancia, obviamente no puede eliminar null
de Java. Recomiendo sustituir la Optional
abstracción siempre que sea posible, y comprobar null
esas otras veces que puede hacer algo razonable al respecto.