Java8 Optional类 - Java8教程

Optional用于包含非空对象的容器对象。Optional对象,用于表示使用不存在null值。这个类有各种实用的方法,以方便代码来处理为可用或不可用,而不是检查null值。它是Java引入, 是类似于在 Guava 中的 Optional

类声明

以下是java.util.Optional<T>类的声明:

public final class Optional<T>
   extends Object

类方法

S.N. 方法及说明
1 static <T> Optional<T> empty() 返回一个空的 Optional 实例。
2 boolean equals(Object obj) 表示某个其他对象是否“等于”此Optional。
3 Optional<T> filter(Predicate<? super T> predicate) 如果值存在,并且该值给定的谓词匹配,返回一个可选描述值,否则返回一个空Optional。
4 <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 如果值存在,应用提供的可选承载映射功能到它,返回结果,否则返回一个空Optional。
5 T get() 如果值是出现在这个 Optional 中,返回这个值,否则抛出NoSuchElementException异常。
6 int hashCode() 返回当前值,哈希码值(如有)或0(零),如果值不存在。
7 void ifPresent(Consumer<? super T> consumer) 如果值存在,调用指定的使用方提供值,否则什么都不做。
8 boolean isPresent() 返回true,如果有一个值存在,否则为false。
9 <U> Optional<U> map(Function<? super T,? extends U> mapper) 如果值存在,应用提供的映射函数,如果结果非空,返回一个Optional描述结果。
10 static <T> Optional<T> of(T value) 返回一个Optional具有指定当前非空值。
11 static <T> Optional<T> ofNullable(T value) 返回一个Optional描述指定的值,如果非空,否则返回一个空的Optional。
12 T orElse(T other) 返回值(如果存在),否则返回other。
13 T orElseGet(Supplier<? extends T> other) 如果存在,返回值,否则调用其他并返回调用的结果。
14 <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) 返回所含值,如果存在的话,否则抛出将由提供者创建的一个例外。
15 String toString() 返回此Optional适合调试一个非空字符串表示。

方法继承

这个类从以下类继承的方法:

  • java.lang.Object

Optional 例子

选择使用任何编辑器创建以下java程序在 C:/> JAVA

Java8Tester.java

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