Optional 部分源码
程序员文章站
2022-06-07 13:13:08
...
没有包含和几个函数式接口相关的方法
package com.copy;
import java.util.NoSuchElementException;
import java.util.Objects;
/**
* Created by syd on 2019/6/13.
*/
public final class OptionalCopy<T> {
private static final OptionalCopy<?> EMPTY = new OptionalCopy <>();
private final T value;
private OptionalCopy() {
this.value = null;
}
/**
* ① 创建一个空的Optional对象
*/
public static <T> OptionalCopy<T> empty() {
OptionalCopy<T> tOptionalCopy = (OptionalCopy<T>) EMPTY;
return tOptionalCopy;
}
private OptionalCopy(T value) {
// value == null 空指针异常
this.value = Objects.requireNonNull(value);
}
/**
* ② 创建一个value不为null的Optional对象
*/
public static <T> OptionalCopy<T> of(T value) {
return new OptionalCopy <>(value);
}
/**
* ③ value 不确定是否为null
* ofNullable = of + empty
*/
public static <T> OptionalCopy<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
/**
* 获取value对象,为null抛出 NoSuchElementException
*/
public T get() {
if (value == null) {
throw new NoSuchElementException("no value present");
}
return value;
}
/**
* 判断 value 是否为 null
*/
public boolean isPresent() {
return value != null;
}
/**
* value != null 返回 value, 否则返回 other
*/
public T orElse(T other) {
return value != null ? value : other;
}
}