如果你写的Java代码中还包含了对Null
的判断,咦,是不是有点low了。本节主要包含了对JDKjava.util.Optional
的理解。
使用Optional需要理解这几点精髓:
创建Optional对象
创建一个空对象
1 | /** |
这没什么好说的。
创建一个非空对象
1 | /** |
需要注意的是参数value值不可以为空,否则会在运行期抛出NullPointerException
创建一个可以为空的对象
1 | /** |
这个就比较好用了,管你是空还是非空,都到碗里来。
对象转换(业务处理)
熟悉Java8相关Function
的很容易理解
对Optional数据进行消费
1 | public void ifPresent(Consumer<? super T> consumer) |
参数为一个Consumer函数,你懂的
对Optional数据进行转换
1 | public<U> Optional<U> map(Function<? super T, ? extends U> mapper) |
参数是一个Function函数,两者的区别在于转换结果对象不一样。
对Optional数据进行过滤
1 | public Optional<T> filter(Predicate<? super T> predicate) |
参数是一个Predicate函数
获取值
补偿输出
意思是如果当前Optional的值不为空则直接返回该值,如果该值为空,则返回另外一个值。Optional类提供了2个函数
1 | public T orElse(T other); |
区别在于,orElse()接收一个参数作为返回,而orElseGet则是接收一个Supplier生产函数。
抛出异常
很多时候,我们对于Null业务的处理是抛出一个自定义异常。
1 | public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X; |
参数是一个生产函数
Example
不使用Optional的写法
1 | public void test() { |
使用Optional后,Null只在你心里
1 | @Test |
总结
Optional简单,用法上也就上面提到的3类,对Function的理解是关键。