1. 作用
对对象进行空判断,之后进行一些列附加操作(多重判断,操作之后返回新的对象)的优雅实现,避免了以往代码不够模块化/易读性差等问题,其中大量使用Objects工具类和函数式接口。
2. 属性/变量
2.1 EMPTY
类私有常量,多用于返回不含值的Optional对象
private static final Optional<?> EMPTY = new Optional<>();
2.2 value
Optional 对象存储的值
private final T value;
3. 构造函数
作为一个工具类,它隐去了构造方法的直接引用,通过提供的限制方法来创建对象来规范化操作。
3.1 Optional.empty()
返回默认的空对象EMPTY
,全局唯一,多处使用,避免重复创建资源带来的性能和资源消耗。
3.2 Optional.of(value)
调用私有的有参构造方法,并对传入的值用Objects
工具类进行校验。
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
就是传入的value
值不能为null
,否则会抛出NullPointerException
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException(