这篇文章,介绍Jave8的 Optional 类和接口的 default、static 方法。
1、Optional类
Optional:Java8 java.util包中提供的一个可以包含或者不包含非null值的容器对象。
通过 Optional 我们不用显式进行空值检测 ( if( T == null ) )也很好的解决空指针异常
1.1 Optional API
Optional 方法 | 说明 |
---|---|
static Optional empty() | 返回一个空Optional(值为null) |
boolean equals(Object obj) | 指示给定的对象是否 equals 此Optional的value |
Optional filter(Predicate<? super predicate) | 如果 Optional 的值存在而且匹配给定的 predicate(断定型函数式接口),返回当前Optional,否则返回一个空Optional(值为null) |
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) | 如果 Optional 的值存在,应用提供的映射方法并返回结果 Optional,否则返回一个空的Optional |
T get() | 如果此 Optional 存在值,则返回值,否则抛出NoSuchElementException |
int hashCode() | 返回当前值的哈希码值(如果有),如果没有值,则返回0。 |
void ifPresent(Consumer<? super T> consumer) | 如果存在值,对该值应用指定的 Consumer(消费型函数式接口),否则不执行任何操作。 |
boolean isPresent() | 如果存在值,返回true,否则返回false |
<U>Optional<U> map(Function<? super T,? extends U> mapper) | 如果值存在,对该值应用给定的映射方法,如果是非null的结果,返回一个描述该值的 optional,否则返回一个空Optional(值为null) |
static Optional of(T value) | 通过给定的value,返回一个值为给定value的Optional实例,value不能为null,若value为null,则抛出NullPointerException |
static Optional ofNullable(T value) | 通过给定的value,返回一个值为给定value的Optional实例,value可为null |
T orElse(T other) | 如果此Optional的value不为null,则返回value,否则返回给定的other对象 |
T orElseGet(Supplier<? extends T> other) | 如果此Optional的value不为null,则返回value,否则通过调用给定的Supplier(供给型函数式接口)返回一个T类型的对象 |
T orElseThrow(Supplier<? extends X> exceptionSupplier) | 如果此Optional的value不为null,则返回value,否则通过调用给定的Supplier创建一个Throwable |
String toString() | 返回非空字符串表示此Optional,适用于调试。 |
项目中常用的实例方法,用于解决空指针异常
-
isPresent()
方法,如果存在值,将返回true,否则返回false。 -
orElse(T other)
方法,如果存在值,则返回当前Optional的value,否则返回 other -
ifPresent(Consumer<? super T> consumer)
,如果存在值,对该值应用指定的 Consumer,执行代码块,否则不做任何操作
1.2 Optional 源码
public final class Optional<T> {
/**
* empty()方法的公共实例
*/
private static final Optional<?> EMPTY = new Optional<>();
/**
* Optional的值,类型为T
*/
private final T value;
/**
* 私有构造器
*/
private Optional() {
this.value = null;
}
/**
* 返回一个空Optional(值为null)
*/
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
/**
* value为入参的构造器,value不能为null,若value为null,则抛出NullPointerException
*/
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
/**
* 通过给定的value,返回一个值为给定value的Optional实例,value不能为null,若value为null,则抛出NullPointerException
*/
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
/**
* 通过给定的value,返回一个值为给定value的Optional实例,value可为null,若value为null,则返回 EMPTY
*/
public static <T> Optional<T> ofNullable(T value) {
return value == nu