La excepción NullPointerException es un error que lanza el compilador de Java cuando se intenta acceder a los métodos o propiedades de un objeto o variable nula (no hemos reservado memoria).
Foo bar = null; bar.doSomething(); // <-- NullPointerException |
aunque en la API de la clase NullPointerException se indican otras formas en las que puede producirse.

Hoy vamos a ver varios consejos que nos ayudarán a evitar la mayoría de situaciones en las que puede producirse esta excepción:
Realizar una comprobación de la variable
La opción más obvia es comprobar antes de hacer nada con la variable si esta es nula o no:
if (bar != null) { bar.doSomething(); } |
De este modo sabemos que la llamada al método se realizará correctamente sin dar un Null Pointer ya que el objeto no apunta a null.
Comparación con constantes (literales y enumerados)
Si estamos comparando una variable con una cadena de caracteres:
if (bar.equals(CADENA_DE_CARACTERES)) { |
puede darnos un Null Pointer Exception si la variable bar es nula. En este caso, dando la vuelta a la comparación podemos evitarnos este riesgo:
if (CADENA_DE_CARACTERES.equals(bar)) { |
Lo mismo puede aplicarse para tipos enumerados.
Comprobar la cadena vacía
Un caso particular del anterior es al comprobar si una variable es una cadena vacía. Siguiendo con el ejemplo anterior, podríamos poner:
if (“”.equals(bar)) { |
Pero puedes ayudarte de la clase StringUtils siendo más descriptivo:
if (StringUtils.isEmpty(bar)) { |
La clase StringUtils tiene varios métodos que permiten realizar operaciones con String sin preocuparnos de comprobar si se trata de variables nulas.
Colecciones vacías
Nunca devuelvas un valor nulo cuando tengas una colección vacía, mejor utiliza Collections.EMPTY_LIST, Collections.EMPTY_SET o Collections.EMPTY_MAP.
public List foo() { List bar = Collections.EMPTY_LIST; return bar; } |
De este modo te ahorras tener que comprobar si la lista devuelta por el método es un objeto nulo o tiene elementos.
Usar métodos
Utiliza métodos que comprueben que no existe un valor nulo como contains(), indexOf(), isEmpty(), containsKey(), containsValue() y hasNext().
public List foo() { Map bar = Collections.EMPTY_MAP; if (bar.containsKey(“something”)) { bar.get(“something”); } } |
Y también nos ahorramos comprobar que obtenemos un objeto que existe dentro de la colección.
Evita una sintaxis de puntos larga
En la medida de lo posible, deberías evitar una sintaxis de puntos demasiado larga. En lugar de
variable1.getFoo().getBar().getX(); |
deberías utilizar
Foo foo = variable1.getFoo(); Bar bar = foo.getBar(); XType x = bar.getX(); |
para que el código pueda ser más fácil de mantener y de comprobar errores en un futuro.
Estos han sido algunos consejos para intentar evitar la clásica NullPointerException. Puedes leer más en los siguientes enlaces: How to Avoid NullPointerException? y Avoid Null Pointer Exception in Java.