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