开发学院

您的位置:首页>教程>正文

教程正文

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