1.先抄一段Optional的介绍
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常。
常用方法:
Optional.of(T t) : 创建一个Optional 实例
Optional.empty() : 创建一个空的Optional 实例
Optional.ofNullable(T t):若t 不为null,创建Optional 实例,否则创建空实例
isPresent() : 判断是否包含值
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回s 获取的值
map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
flatMap(Function mapper):与map 类似,要求返回值必须是Optional
2.API介绍
2.1 Optional(T value),empty(),of(T value),ofNullable(T value)
2.11 Optional(T value)
构造函数,private权限的。其余三个都是静态函数
首先大致看下Optional的源码,Optional类为泛型类,构造器均为私有的,提供静态静态给外界调用
Optional 的值为final修饰的 ,任何操作都不会改变Optional 的值。
构造器Optional(T value)
2.12 Optional.of(T value)方法介绍
通过of(T value)函数所构造出的Optional对象,当Value值为空时,依然会报NullPointerException。
查看源码of函数会调用requireNonNull方法
2.13 Optional.empty()介绍
通过Optional.empty()创建一个空的通过Optional对象
2.14 Optional.ofNullable()介绍
相比较of(T value)的区别就是,当value值为null时,of(T value)会报NullPointerException异常;
ofNullable(T value)不会throw Exception,ofNullable(T value)直接返回一个EMPTY对象。
如果我们在使用场景中希望为null直接抛出空指针异常则of函数适合
如果希望为null时返回一个空的Optional对象则使用ofNullable
3.orElse(T other),orElseGet(Supplier<? extends T> other)和orElseThrow(Supplier<? extends X> exceptionSupplier)
这3个函数都是在构造函数传入的value值为null时,进行调用的,