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();
}

相关