public final class Optional<T> 构造函数私有化;不能new 实例;不能被继承;
Optional 类主要解决的问题是空指针异常(NullPointerException)
本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。
成员变量:
其中:
EMPTY:是方法的公共实例,如empty()方法;
value:为空,指示当前不存在值
一个容器对象可能或不能包含非空对象;
值存在,isPresent()返回TRUE; get()返回值;
调用isPresent方法,判断user是否为空;get()方法从包装类里获取原有对象,地址不变;
附加方法依赖于提供的值存在与否;如: orElse() 如不存在返回默认值;ifPresent() :值存在就执行一段代码;源码如下:
public T orElse(T other) { return value != null ? value : other; }
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
方法 orElse 当调用对象不为空时,返回本身,否则返回othis;
ofElseGet():方法 当调用对象不为空,返回被包装的对象,否则执行方法返回的对象;
public void ifPresent(Consumer<? super T> consumer) { if (value != null) consumer.accept(value); }
方法 ifPresent 当user1存在,就执行consymer对象;方法:of(t value) 若value为null,报NullPointerException;
例:
user 不为null,则底层调用of方法,返回user的包装;方法 filter() 如果存在一个值,并且该值与给定 preicate匹配,返回描述值的Optional,否则返回 empty Optional}. map 方法 如果 mapper值存在;则将提供的映射函数应用到它,如果结果不为 NULL,则返回{option描述*结果。否则返回empty。
map()方法用于通过函数获取存在对象中的值;