Java 8 Optional 类
Java 8 Optional 类
Optional 是用于包含非null对象的容器对象。Optional 对象用于表示缺少值的null值。这个类有各种实用方法来帮助代码将值处理为“available”或“not available”,而不是检查null值。它是在Java 8中引入的,类似于Guava中的Optional。
Optional类声明
以下是java.util.Optional<T>类的声明:
public final class Optional<T> extends Object
Optional类方法
static <T> Optional<T> empty():返回一个空的Optional实例.
boolean equals(Object obj):判断某个对象是否“等于”该Optional类.
Optional<T> filter(Predicate<? super <T> predicate):如果存在一个值,并且该值与给定谓词匹配,则返回描述该值的Optional值,否则返回空Optional值。
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper):如果存在值,它会将提供的Optional方位映射函数应用于该值,返回该结果,否则返回空的Optional值。
T get():如果此Optional中存在值,则返回该值,否则抛出NoSuchElementException。
int hashCode():返回当前值的哈希代码值(如果有),如果没有值,则返回0 (零)。
void ifPresent(Consumer<? super T> consumer):如果存在值,它会使用该值调用指定的使用者,否则不会执行任何操作。
boolean isPresent():如果存在值,则返回true,否则返回false。
<U>Optional<U> map(Function<? super T,? extends U> mapper):如果存在值,则将提供的映射函数应用于该值,如果结果为非空,则返回描述结果的Optional。
static <T> Optional<T> of(T value):返回一个可选值,具有指定的当前非空值。
static <T> Optional<T> ofNullable(T value):返回描述指定值的可选值(如果非null ),否则返回空可选值。
T orElse(T other):返回值(如果存在),否则返回其他。
T orElseGet(Supplier<? extends T> other):返回值(如果存在),否则调用其他并返回该调用的结果。
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier):返回包含的值(如果存在),否则将引发由提供的供应商创建的异常。
String toString():返回适合调试的此Optional项的非空字符串表示形式。
此类继承了以下类的方法
java.lang.Object
Optional的例子
使用任何编辑器创建以下Java程序,例如C:\> JAVA.
Java8Tester.java Live Demo import java.util.Optional; public class Java8Tester { public static void main(String args[]) { Java8Tester java8Tester = new Java8Tester(); Integer value1 = null; Integer value2 = new Integer(10); //Optional.ofNullable - allows passed parameter to be null. Optional<Integer> a = Optional.ofNullable(value1); //Optional.of - throws NullPointerException if passed parameter is null Optional<Integer> b = Optional.of(value2); System.out.println(java8Tester.sum(a,b)); } public Integer sum(Optional<Integer> a, Optional<Integer> b) { //Optional.isPresent - checks the value is present or not System.out.println("First parameter is present: " + a.isPresent()); System.out.println("Second parameter is present: " + b.isPresent()); //Optional.orElse - returns the value if present otherwise returns //the default value passed. Integer value1 = a.orElse(new Integer(0)); //Optional.get - gets the value, value should be present Integer value2 = b.get(); return value1 + value2; } }
校验结果
使用javac编译器编译类,如下所示
C:\JAVA>javac Java8Tester.java
现在运行Java8Tester:
C:\JAVA>java Java8Tester
它应该产生以下输出:
First parameter is present: false Second parameter is present: true 10