教程 > Java8 教程 > Java8 特性 阅读:14

Java8 Optional 类

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


类定义

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

public final class Optional<T> extends Object
序号 方法 描述
1 static <T> Optional<T> empty() 返回一个空的 Optional 实例。
2 boolean equals(Object obj) 指示某个其他对象是否“等于”此 Optional。
3 Optional<T> filter(Predicate<? super <T> predicate) 如果存在一个值并且该值与给定的谓词匹配,则它返回一个描述该值的 Optional,否则返回一个空的 Optional。
4 <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 如果存在一个值,它会将提供的 Optional-bearing 映射函数应用于它,返回该结果,否则返回一个空的 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) 如果存在值,则对其应用提供的映射函数,如果结果为非 null,则返回描述结果的 Optional。
10 static <T> Optional<T> of(T value) 返回具有指定当前非空值的 Optional。
11 static <T> Optional<T> ofNullable(T value) 返回一个描述指定值的 Optional,如果非 null,否则返回一个空 Optional。
12 T orElse(T other) 如果存在则返回值,否则返回其他值。
13 T orElseGet(Supplier<? extends T> other) 如果存在则返回值,否则调用 other 并返回该调用的结果。
14 <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。
15 String toString() 返回此 Optional 适合调试的非空字符串表示形式。

这个类继承了下面类的方法

  • java.lang.Object

Optional 类示例

下面是一个 Optional 类的示例

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 - 允许传递的参数为空。
      Optional<Integer> a = Optional.ofNullable(value1);
        
      //Optional.of - 如果传递的参数为 null,则抛出 NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }
    
   public Integer sum(Optional<Integer> a, Optional<Integer> b) {
      //Optional.isPresent - 检查值是否存在
        
      System.out.println("First parameter is present: " + a.isPresent());
      System.out.println("Second parameter is present: " + b.isPresent());
        
      // Optional.orElse - 如果存在则返回值,否则返回传递的默认值。
      Integer value1 = a.orElse(new Integer(0));
        
      // Optional.get - 获取值,值应该存在
      Integer value2 = b.get();
      return value1 + value2;
   }
}

上面代码的运行结果如下

Java8 Optional 类

查看笔记

扫码一下
查看教程更方便