Funciones relacionadas con JDK8.0: clase opcional (4)

Funciones relacionadas con JDK8.0

Siete, clase opcional

  • Clase opcional: Ubicada en el paquete java.util.Optional, es una clase contenedora que representa la existencia o no existencia de un valor (anteriormente, se usaba null para indicar si existe un valor. JDK8.0 comenzó a usar la clase Opcional para expresar mejor si existe un valor). Al mismo tiempo, puede evitar la excepción del puntero nulo.

  • Utilice el método estático en la clase opcional para obtener el objeto opcional:

    • de (valor T): crea no vacío, si el valor está vacío, lanza NullPointException
    • vacío (): crea un valor vacío
    • ofNullable (valor T): crea un objeto opcional, permitiendo valores nulos
  • Acceder al objeto opcional

    • get (): Obtiene el valor, lanza una excepción si el valor está vacío, la información de la excepción es:

      Java.util.NoSuchElementException

    • isPresent (): determina si el valor existe

    • oElse (valor T): obtenga el valor, si no hay ningún valor, tome el valor predeterminado

    • orElseGet (Proveedor s): Con lógica, obtenga el valor

    • ifPresent (Consumidor c): Si el valor existe, consume el valor

    • map (Función f): convierte la entrada a otra forma para la salida

    //获取Optional的三种方式
    Optional<Student> o=Optional.of(new Student());//创建非空值
    System.out.println(o.get());
    
    Optional<Student> o2=Optional.empty();//创建空值
    System.out.println(o2.get());
    
    Optional<Student> o3=Optional.ofNullable(null);//允许null值
    System.out.println(o3.get());
    
    //操作Optional对象
    if(o3.isPresent()){
          
          
        System.out.println(o3.get());
    }
            
    Student s=o3.orElse(
        new Student("张三",28, Student.Status.Study));
    System.out.println(s);
    
    //获取学生的姓名
    Student s2=new Student();
    Optional<Student> o4=Optional.of(s2);
    String name=o4.map((s5)->s5.getName()).orElse("no name");
    System.out.println(name);
    
    o4.ifPresent(System.out::println);//不为空,则消费数据
    
  • Precauciones:

    • Opcional es una clase final y no implementa ninguna interfaz. Cuando todos los programas usan paquetes opcionales para definir atributos de clase, si la clase definida tiene requisitos de serialización de objetos, debido a que la clase Opcional no implementa la interfaz serializable, la operación de serialización de objetos será un problema :

      class User implements Serializable {
              
              
          private long id;
          private String name;
          private Optional<Long> phone;//不能对象序列化
      }
      //替换策略
      class User implements Serializable {
              
              
          private long id;
          private String name;
          private Long phone;//不能对象序列化
          public Optional<Long> getPhone(){
              
              
              return Optional.ofNullable(this.phone);
          }
      }
      
    • Es solo una herramienta de contenedor, los métodos ordinarios y las palabras simples en realidad son innecesarios de usar, no lo use para su uso

Supongo que te gusta

Origin blog.csdn.net/Java_lover_zpark/article/details/90293309
Recomendado
Clasificación