Optional

Wu Jun 2020-01-03 03:43:49
Categories: > > Tags:

@since 1.8

为了解决空指针异常,受到 Google Guava 的启发,Optional 类已经成为 Java 8 类库的一部分。

Optional 实际上是个容器:它可以保存类型T的值,或者仅仅保存 null。Optional 提供很多有用的方法,这样就不用显式进行空值检测。

1 初始化

2 判断

3 若存在

4 若不存在

Optional< String > fullName = Optional.ofNullable( null );
fullName.isPresent();//false
fullName.orElseGet( () -> "[none]" );//[none]
fullName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" );//Hey Stranger!
// Returns maximum value in collection as an Optional<E>
public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
    if (c.isEmpty())
        return Optional.empty();
    E result = null;
    for (E e : c)
        if (result == null || e.compareTo(result) > 0)
    result = Objects.requireNonNull(e);
    return Optional.of(result);
}

// Using an optional to provide a chosen default value
String lastWordInLexicon = max(words).orElse("No words...");
// Using an optional to throw a chosen exception
Toy myToy = max(toys).orElseThrow(TemperTantrumException::new);
// Using optional when you know there’s a return value
Element lastNobleGas = max(Elements.NOBLE_GASES).get();