Optional
一、Optional概述
Optional是为了避免空指针异常,在jdk1.8,受谷歌的Guava项目引入了Optional类启发,引进了Optional类。
Option类是一个可以为null容器类,如果保存T,则表示这个值存在,如果仅仅保存null,则表示这个值不存在。
如果值存在 则isPresent()方法会返回true,调用get()方法会返回该对象。
使用场景:
比如Stream流中就存在许多返回值为Optional的方法。
二、创建Optional
方法:
Optional.of(T t) :
创建一个 Optional 实例,t必须非空;
Optional.empty() :
创建一个空的 Optional 实例
Optional.ofNullable(T t):
t可以为null
示例:
public void method(){
Optional<String> optional1 = Optional.of("string");
Optional<Object> optional2 = Optional.empty();
Optional<String> optional3 = Optional.ofNullable("string");
}
三、对象判断
方法:
boolean isPresent() :
判断是否包含对象
void ifPresent(Consumer<? super T> consumer) :
如果有值,就执行Consumer 接口的实现代码,并且该值会作为参数传给它。
示例:
boolean b = optional1.isPresent();
optional1.ifPresent((e) ->{
System.out.println(e);
});
四、获取对象
方法:
T get():
如果调用对象包含值,返回该值,否则抛异常 。
T orElse(T other) :
如果有值则将其返回,否则返回指定的other对象。
T orElseGet(Supplier<? extends T> other) :
如果有值则将其返回,否则返回由 Supplier接口实现提供的对象。
T orElseThrow(Supplier<? extends X> exceptionSupplier) :
如果有值则将其返 回,否则抛出由Supplier接口实现提供的异常。
示例:
String s = optional1.get();
String s1 = optional1.orElse("string");
String s2 = optional1.orElseGet(() -> {
return "string";
});
String s3 = optional1.orElseThrow(() -> {
return new RuntimeException("null");
});