Optional使用小结
Optional使用小结
1. 接口介绍
| 方法名 | 参数 | 方法描述 | 
|---|---|---|
| of | T value | 接收T类型对象封装为一个Optional对象,value不能为null,否则会抛出空指针异常 | 
| ofNullable | T value | 接收T类型对象封装为一个Optional对象,value可以为null | 
| orElse | T other | 如果Optional对象为空,返回 T 类型的other对象 | 
| orElseGet | Supplier<? extends T> other | 如果Optional对象为空,可以传入一个函数式接口,该函数式接口没有参数,返回一个T类型的对象 | 
| orElseThrow | Supplier<? extends X> exceptionSupplier | 如果Optional对象为空,通过函数式接口抛出异常 | 
| get | 空 | 如果Optional中有值存在,返回该值,否在抛出NoSuchElementException("No value present")异常 | 
| empty | 空 | 创建一个空的Optional对象 | 
| filter | Predicate<? super T> predicate | 如果函数式接口predicate返回true,则返回Optional对象,否则返回一个空的Optional对象 | 
| map | Function<? super T, ? extends U> mapper | 如果Optional中的值存在,调用mapper函数式接口对Optional中的值进行操作并返回新的Optional对象 | 
| flatMap | Function<? super T, Optional> mapper | 如果Optional中的值存在,调用mapper函数式接口对Optional中的值进行操作并返回一个新的Optional对象,否则返回一个空对象 | 
| isPresent | 空 | Optional中的value值是否为null,如果是null就返回false,否则就返回true | 
| ifPresent | Consumer<? super T> consumer | 如果Optional中的值不为空,调用consumer函数式接口操作当前Optional对象中的value值 | 
2. 应用场景总结
2.1 返回值控制
当某个接口的返回值为某个对象,有可能这个对象的返回值为null。如果外部在调用该接口时没有进行空值校验,就有可能会抛出空指针异常。
public interface productSearchService{
    Optional getProductOptional(Integer productId)
}
 
但是需要注意一点,如果返回的是一个集合对象,不要用Optional进行包装。
这样会使得调用者在判断集合不为null后还需要判断List的集合大小,这种情况可以直接返回一个空集合就可以了
public interface productSearchService{
    Optional> getList();
}