JavaRush /Blog Java /Random-ES /Trucos y consejos. Cómo evitar NullPointerException en ap...
DarthVictor
Nivel 28

Trucos y consejos. Cómo evitar NullPointerException en aplicaciones Java

Publicado en el grupo Random-ES
Trucos y consejos.  Cómo evitar NullPointerException en aplicaciones Java - 1Hoy te mostraré técnicas simples sobre cómo evitar NullPointerException en tus aplicaciones. Son fáciles de seguir, pero mejoran significativamente la confiabilidad y calidad de su código. Además, en mi experiencia, el primer consejo tendrá un impacto notable en la calidad de su código. Si conoce otros trucos de programación Java, no dude en compartirlos en los comentarios. Trucos y consejos.  Cómo evitar NullPointerException en aplicaciones Java - 2

Llame a los métodos equals() y equalsIgnoreCase() en un literal de cadena conocido en lugar de en un objeto desconocido

Llame siempre a un método equals()en una cadena conocida que sepa que no lo es null. El método equals()es simétrico, es decir, llamar a a.equals(b)y b.equals(a)dará el mismo resultado (si ay bno null), y por esta razón muchos programadores no prestan atención a qué objetos se llaman equals(), y ao y b. Uno de los efectos secundarios de esto es una NullPointerException si se llama al método null.
Object unknownObject = null;

//плохой способ - может вызвать NullPointerException
if(unknownObject.equals("knownObject")){
   System.err.println("This may result in NullPointerException if unknownObject is null");
}

//правильный способ - исключение NullPointerException не возникнет, даже если unknownObject null
if("knownObject".equals(unknownObject)){
    System.err.println("better coding avoided NullPointerException");
}
Este fue el consejo más simple para evitar NullPointerException, pero por sí solo supone una gran mejora porque el método equals()es ubicuo.

Elija valueOf() sobre toString() en los casos en que ambos produzcan el mismo resultado

Dado que llamar toString()a una referencia con un valor nullgenera una excepción NullPointerException, es mejor usar la llamada valueOf()cuando podamos obtener el mismo resultado, ya que llamar valueOf()desde nulldevuelve null. Esto es especialmente cierto para clases contenedoras como Integer, Floato . DoubleBigDecimal
BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); //не выбрасывает NPE
System.out.println(bd.toString()); //выбрасывает "Exception in thread "main" java.lang.NullPointerException"
Utilice estos consejos cuando no esté seguro de si un objeto puede existir nullo no.

Utilice nullbibliotecas y métodos seguros

Hay muchas bibliotecas de código abierto que asumen la pesada carga de realizar pruebas null. Uno de los más comunes es el StringUtilsde Apache Commons. Utilizando métodos como StringUtils.isBlank(), isNumeric(), isWhiteSpace()etc. no tiene que preocuparse por generar una NullPointerException.
//Методы StringUtils являются null-безопасными, они не вызовут NullPointerException
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));
Salida: verdadero verdadero falso falso Y, sin embargo, antes de usarlo, no olvide leer la documentación nullde métodos y clases seguros. Este es otro de los mejores trucos de Java que conduce a grandes mejoras sin requerir mucho esfuerzo.

Intenta no regresar nullde un método, es mejor devolver una colección vacía

Este es otro buen consejo de programación Java que Joshua Bloch describe en su libro Java: Programación efectiva. Al devolver colecciones o matrices vacías, asegúrese de que llamar a métodos base como size()o length()no arroje una NullPointerException. La clase Collectionsdeclara específicamente implementaciones convenientes de listas, conjuntos y diccionarios vacíos Collections.EMPTY_LIST: Collections.EMPTY_SETy Collections.EMPTY_MAP. Por ejemplo:
public List getOrders(Customer customer){
   List result = Collections.EMPTY_LIST;
   return result;
}
De manera similar, puedes usarlo Collections.EMPTY_SETen Collections.EMPTY_MAPlugar de regresar null.

Utilice anotaciones @NotNull y @Nullable

En la descripción de sus métodos, puede definir nullconvenciones de seguridad de métodos usando anotaciones @NotNully @Nullable para indicar si un método puede regresar nullo no. Los compiladores e IDE modernos pueden usar estas anotaciones para analizar su código y brindar consejos apropiados, por ejemplo, sobre omitir una verificación de null, o viceversa, sobre la posibilidad de eliminar una verificación innecesaria que está obstruyendo el código. Estas anotaciones, por ejemplo, son compatibles con IntelliJ IDE y FindBugs, y también están incluidas en JSR 305. Pero incluso si su IDE no admite dichas anotaciones, serán una buena documentación en sí mismas. Mire @NotNully @Nullableserá más fácil para el programador comprender dónde agregar un cheque nully dónde no. Esta, por cierto, es una práctica bastante nueva entre los programadores de Java y llevará tiempo difundirla.

Evite el autoboxing y autounboxing innecesarios en su código

Esto no solo conduce a la creación de objetos temporales innecesarios, sino que el autoboxing también puede generar una NullPointerException si la clase contenedora es null. Por ejemplo, el siguiente código generará una excepción NullPointerException si la entrada de la persona no contiene un número de teléfono y devuelve null.
Person ram = new Person("ram");
int phone = ram.getPhone();
Cuando se utiliza autoboxing o autounboxing, no solo las igualdades, sino también las desigualdades <pueden >resultar en una NullPointerException.

Siga las convenciones y defina valores predeterminados razonables.

Una de las mejores formas de evitar NullPointerException en Java es declarar y seguir correctamente las convenciones de codificación. La mayoría de las NullPointerExceptions ocurren cuando intentas crear un objeto sin tener todos los datos y dependencias que requiere. Al evitar la creación de objetos inacabados rechazando elegantemente dichas solicitudes, se salvará de una gran cantidad de NullPointerExceptions en el futuro. Del mismo modo, si permite la creación de objetos, debe elegir un valor predeterminado razonable. Por ejemplo, un objeto de clase Employeeno se puede crear sin un nombre y id, pero no puede tener un número de teléfono. En este caso, los objetos Employeesin número pueden devolver cero null. Aunque este comportamiento del objeto debe pensarse de antemano, puede resultar más fácil comprobar nullque llamar a un número inexistente. En este caso, tener condiciones adicionales sobre qué campos están nully cuáles no ayudará a tomar la decisión correcta. En general, la elección entre bloquear inmediatamente el programa o asignarlo nulles una decisión de diseño importante y, una vez que haya tomado la decisión, debe seguirla de manera constante.

Establecer restricciones a nivel de DBMS

Cuando utilice una base de datos para almacenar objetos de su programa, como Clientes o Pedidos, es aconsejable especificar la " nullness" de sus objetos en el nivel DBMS, utilizando restricciones de tabla apropiadas. Las bases de datos suelen contener información de múltiples fuentes y la introducción de comprobaciones de valores faltantes mejorará la integridad de sus datos. Además, la presencia de comprobaciones de nulos en el nivel DBMS las reducirá en su código Java: al cargar datos de la base de datos en objetos Java, puede estar seguro de su presencia y eliminar " " innecesarios != nulldel código del programa.

Utilice el patrón de objeto nulo

Crear Nullobjetos especiales es otra forma de evitar NullPointerExcpetion en Java. Supongamos que algún método en nuestra aplicación devuelve un objeto con el que el programa trabaja posteriormente llamando a sus métodos. Por ejemplo, el método Collection.iterator()devuelve un objeto de la clase Iteratorque se utiliza para recorrer la colección. Luego, si el objeto original no tiene ningún iterador, nullpuede devolver un Nullobjeto especial que tenga un método hasNext()que siempre devuelva false. Eso es todo, querido lector, aquí termino mis consejos para eliminar los errores NullPointerException de los programas Java. Apreciarás lo útiles que pueden ser estas reglas simples y no engorrosas. Como recordatorio, si desea compartir otros trucos de NullPointerException en programas Java, no dude en hacerlo en los comentarios. Traducido específicamente para estudiantes de JavaRush. Original
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION