欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jdk1.8中的optional类源码解析

程序员文章站 2022-03-03 23:07:49
...

1:类中变量

EMPTY:一个空的optional实例 用来通过empty() 重置被封装对象值为空
value:一个不是空的optional实例 ,被封装对象

2:类中public函数:

//获得空的optional对象
static<T> Optional<T> empty();
//转化对象为optional包装类型 如果为空抛出异常 
static <T> Optional<T> of(T value);
//转化对象为optional包装类型 为空不报异常
static <T> Optional<T> ofNullable(T value);
//获取包装的对象
T get();
//判断optional包装的对象是否为空 返回boolean值 由!=判断
boolean isPresent();
//判断optional包装对象是否不为空并且使用consumer接口的函数没有异常
//Consumer函数接口是用来接受一个参数去执行 不返回值
void ifPresent(Consumer<? super T > consumer);
//Optional 拥有filter、map、flatmap流操作方式

//获取被包装的对象如果为空返回参数 参数不能是lambda
T orElse(T other);
//获取被包装的对象 如果为空 返回lambda表达式的值
T orElseGet(Supplier<? extends T> other);
//获取被包装的对象 如果为空 抛出lambda表达式返回的异常
<X extends Throwable> T orElseThrow(Supplier<?extends X> exceptionSupplier) throws X;

//重载eq和hashcode函数

3: private函数

//私有的构造函数 将value值赋null 
Optional();
//私有构造函数 用来构建Optional对象
Optional(T value)'

4:map、flatMap 、filter

类似 stream中的map、flatMap、filter
map用来增加操作
flatMap 扁平化
filter 过滤

总结:

1:optional类就是对对象进行封装用optional中的方法更优雅的处理空值的情况。
2:一般用法:在方法返回的时候通过of或者ofNullable方法转换成相应对象--》在调用的时候通过optional提供的方法去做边界处理。
3:特别是和Stream结合的时候。需要一个默认值或者指定的异常的时候就非常需要这种优雅的方式去处理。
4:提供的map、flatMap、filter 主要用来更好的使用 特别是flatMap 避免出现Optional<Optional<T>>这种类型

上一篇: Optional容器(jdk1.8)

下一篇: HashMap