¿Cómo evitar NullPointerException en Java usando la clase opcional?

Para aprender a evitar un error, primero debemos entender el error.

Excepción de puntero nulo

NullPointerException es una RuntimeException. En Java , se puede asignar un valor nulo especial a una referencia de objeto. NullPointerException se lanza cuando el programa intenta usar una referencia de objeto que tiene el valor nulo.

Estos pueden ser:

  • Invocar un método desde un objeto nulo.
  • Acceder o modificar el campo de un objeto nulo.
  • Tomando la longitud de nulo, como si fuera un arreglo.
  • Accediendo o modificando las ranuras del objeto nulo, como si fuera una array.
  • Lanzar nulo, como si fuera un valor Throwable.
  • Cuando intenta sincronizar sobre un objeto nulo.

Ejemplo:

// Java program to show NullPointerException
  
public class Example {
    public static void main(String[] args)
    {
  
        // Create a String of size 10
        String[] a = new String[10];
  
        // The String is empty
        // So a[1] will have null at present
        String upcase = a[1].toUpperCase();
  
        System.out.print(upcase);
    }
}

Producción:

Exception in thread "main" java.lang.NullPointerException
    at Example.main(Example.java:4)

¿Cómo evitar NullPointerException con una clase opcional?:
Java 8 ha introducido una nueva clase Opcional en el paquete java.util . Puede ayudar a escribir un código ordenado sin usar demasiadas comprobaciones nulas. Al usar Opcional, podemos especificar valores alternativos para devolver o código alternativo para ejecutar. Esto hace que el código sea más legible porque los hechos que estaban ocultos ahora son visibles para el desarrollador.

Optional Class
Optional es un objeto contenedor que puede contener un valor nulo o no nulo. Básicamente comprueba si la dirección de memoria tiene un objeto o no. Si hay un valor presente, isPresent() devolverá verdadero y get() devolverá el valor. Se proporcionan métodos adicionales que dependen de la presencia o ausencia de un valor contenido, como orElse() que devuelve un valor predeterminado si el valor no está presente e ifPresent() que ejecuta un bloque de código si el valor está presente. Esta es una clase basada en valores, es decir, sus instancias son:

  • Final e inmutable (aunque puede contener referencias a objetos mutables).
  • Se considera igual únicamente en función de equals(), no en función de la igualdad de referencia (==).
  • No tiene constructores accesibles.
  • Sintaxis:

Optional is a generic type of type T.

Optional<T>

Rectificando el código para la NullPointerException anterior usando la clase opcional:

// Java program to avoid NullPointerException
// using Optional Class
  
import java.util.Optional;
  
public class Example {
    public static void main(String[] args)
    {
  
        // Create a String of size 10
        String[] a = new String[10];
  
        // Create an Optional Class instance
        // and get the state for a[1] element
        // for Null value
        Optional<String> check = Optional.ofNullable(a[1]);
  
        // If the value in the current instance is null,
        // it will return false, else true
        if (check.isPresent()) {
  
            // The String is empty
            // So a[1] will have null at present
            String upcase = a[1].toUpperCase();
            System.out.print(upcase);
        }
        else
  
            // As the current value is null
            System.out.println("String value is not present");
    }
}
Producción:

String value is not present

Nota: Por lo tanto, esto puede entenderse como un método de manejo de excepciones para NullPointerException

Manejo de NullPointerException utilizando la clase opcional:

// Java program to handle NullPointerException
// using Optional Class
  
import java.util.Optional;
  
public class Example {
    public static void main(String[] args)
    {
  
        // Create a String of size 10
        String[] a = new String[10];
  
        // Define the a[1] element
        a[1] = "geeksforgeeks";
  
        // Create an Optional Class instance
        // and get the state for a[1] element
        // for Null value
        Optional<String> check = Optional.ofNullable(a[1]);
  
        // If the value in the current instance is null,
        // it will return false, else true
        if (check.isPresent()) {
  
            // The String is not empty
            // So a[1] will have a value at present
            String upcase = a[1].toUpperCase();
            System.out.print(upcase);
        }
        else
  
            // If the current value is null
            System.out.println("String value is not present");
    }
}
Producción:

GEEKSFORGEEKS

Publicación traducida automáticamente

Artículo escrito por vishodushaozae y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *