Optional 类是用来存放值的容器 他在JDK8 中用避免NULL意外的操作 java程序一旦遇到异常 不进行处理就会直接中断程序 为了更好的去完善程序 Optional 就被提出 他存放的是值也就是管理对象的容器
一.部分源码解析
类共享的空值容器 当需要存储NULL值容器 全类共享容器 可以节省内存消耗
private static final Optional<?> EMPTY = new Optional<>();
存放值的泛型变量
private final T value;
私有构造方法 说明Optional 对象不能直接new 出 需要使用对应的Optional的方法
private Optional() {
this.value = null;
}
静态方法 返回值引用的空对象实例 减少内存开销 此处使用注解警用安全检查
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
构造方法 有参构造但是权限私有无法访问
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
返回储存对象的实力 但是需要之一 这个情况下会对像进行判断 如果为NULL还是会爆出异常
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
如果不确定是否为空可以使用这个方法 这个方法会在内部先判断 如果为NULL则会返回 类共用的NULL值容器 如果不为NULL则会返回储存对象的单例
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
获取容器的元素 如果容器储存值为空 还是会报异常 不为空则会进行返回
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
这个是判断 容器值是否为空的方法 为空则返回false 不为空则返回真
public boolean isPresent() {
return value != null;
}