Directorio de artículos
orientación del usuario
crear
Opcional solo tiene constructor privado. Ejemplos de métodos de creación son:
@Test
public void test1() {
// 以下两个等价
System.out.println(Optional.ofNullable(null));
System.out.println(Optional.empty());
// 明确是非空的采用这个
System.out.println(Optional.of("not null"));
}
Salida:
Opcional.evacío
Opcional.evacío
Opcional [no nulo]
Obtener directamente
@Test
public void test2() {
Optional<String> opt = Optional.ofNullable("12345");
System.out.println(opt.get());//12345
Optional.empty().get();//java.util.NoSuchElementException: No value present
}
si está presente
@Test
public void test2() {
Optional<String> opt = Optional.ofNullable("12345");
opt.ifPresent(System.out::println); // 12345
}
o bien relacionados
@Test
public void test3() {
Optional<String> opt = Optional.ofNullable(null);
System.out.println(opt.orElse("hello")); // 输出hello
System.out.println(opt.orElseGet(() -> new String("by create")));// 输出by create
}
Si existe, envíe el contenido de else directamente. ElseGet usa el método de programación funcional para retrasar la creación del objeto. Se puede usar para objetos complejos orElseGet
y el rendimiento será mejor.
Excepción personalizada
@Test
public void test4() {
Optional.ofNullable(null).orElseThrow(() -> new RuntimeException("自定义异常"));// 抛出异常
}
mapa y plano
@Test
public void tes4() {
Optional<String> opt = Optional.ofNullable("hello world");
System.out.println(opt.flatMap(i -> Optional.ofNullable("bad"))); //Optional[bad]
System.out.println(opt.map(i -> "bad"));//Optional[bad]
}
No hay diferencia, no es necesario encapsular el mapa.
para resumir
El patrón de diseño utilizado en Opcional es muy simple, es decir, el patrón envoltorio, que envuelve el valor y brinda una serie de soluciones para evitar punteros nulos.
Nota: la Optional
clase no está implementadaSerializable