Clase opcional de JDK 8

¿Qué es la clase opcional?

NPE (Null Pointer Exception) siempre ha sido nuestro problema más problemático, y también es el lugar más fácil de pasar por alto. NPE es a menudo la causa más común de falla de las aplicaciones Java. En el trabajo diario de I + D, a menudo se tratan varias variables y conjuntos, pero en el proceso de uso, a menudo es necesario hacer juicios vacíos, de lo contrario, aparecerá NPE.

La clase Opcional es en realidad un contenedor: puede almacenar el valor de tipo T, o simplemente almacenar nulo. La introducción de la clase Optional es una buena solución a la excepción del puntero nulo. Opcional proporciona muchos métodos útiles para que no necesitemos verificar explícitamente valores nulos. Intente evitar llamar directamente a los métodos get () e isPresent () del objeto Optional en el programa, y ​​evite usar el tipo Optional para declarar los atributos de la clase de entidad.

Opcional. De (T t): Crea una instancia
opcional Opcional.empty (): Crea una instancia
opcional vacía Opcional. De Nullable (T t): Si t no es nulo, crea una instancia opcional, de lo contrario crea una instancia vacía
isPresent () : Juzga si contiene un valor o
Else (T t): Si el objeto que llama contiene un valor, devuelve el valor; de lo contrario, devuelve t o
ElseGet (Proveedor s): Si el objeto que llama contiene un valor, devuelve el valor; de lo contrario, devuelve el valor obtenido por s
map (Función f): Si hay un valor para procesarlo, y devuelve el Opcional procesado, de lo contrario, devuelve Opcional.empty ()
flatMap (Mapeador de funciones): Similar a map, el valor devuelto debe ser Opcional

Cómo utilizar la clase opcional

El siguiente código compara el código después de usar la clase Optional en dos escenarios comunes. Se puede ver que el código es mucho más conciso.

El primer escenario: determinar si está vacío

package com.java.bitmap;
 
import java.util.Optional;
 
public class OptionalDemo {
 
    public static void main(String[] args) {
        String name="kerry";
        // common way
        if (name!=null&&name.length()!=0){
            System.out.println(name.length());
        }
        //use optional way
        System.out.println(Optional.ofNullable(name).orElse("").length());
 
 
    }
}

El segundo escenario: atravesar el objeto de lista

 public static void listIterator(List<Integer> list){
        // common way
        if (list!=null&&list.size()!=0){
            for (Integer tmp:list) {
                System.out.println(tmp);
            }
        }
        //use optional way
        Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(tmp->{System.out.println(tmp);});
    }

La tercera escena:

public User getUser(User user) throws Exception{
    if(user!=null){
        String name = user.getName();
        if("zhangsan".equals(name)){
            return user;
        }
    }else{
        user = new User();
        user.setName("zhangsan");
        return user;
    }
}

public User getUser(User user) {
    return Optional.ofNullable(user)
                   .filter(u->"zhangsan".equals(u.getName()))
                   .orElseGet(()-> {
                        User user1 = new User();
                        user1.setName("zhangsan");
                        return user1;
                   });
}

orElseGet es similar a orElse, y ambos pueden devolverse con un tipo personalizado. El primero admite expresiones lamaba.
Enlace original: https://blog.csdn.net/hanruikai/article/details/113995276

Supongo que te gusta

Origin blog.csdn.net/weixin_40648700/article/details/114137416
Recomendado
Clasificación