鍍金池/ 教程/ Java/ Java8 Optional類
Java8數(shù)據(jù)流
Java8默認方法
Java8 Optional類
Java8 Base64
Java8期間及持續(xù)時間
Java8函數(shù)式接口
Java8 日期時間API
Java8 本地DateTime API
Java8教程
Java8 Lambda表達式
Java8環(huán)境設(shè)置
Java8向后兼容
Java8 時間調(diào)節(jié)器
Java8 ChronoUnits枚舉
Java8方法引用
Java8 Nashorn JavaScript引擎
Java8 時區(qū)DateTime API

Java8 Optional類

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)
如果值存在,應(yīng)用提供的可選承載映射功能到它,返回結(jié)果,否則返回一個空Optional。
5 T get()
如果值是出現(xiàn)在這個 Optional 中,返回這個值,否則拋出NoSuchElementException異常。
6 int hashCode()
返回當前值,哈希碼值(如有)或0(零),如果值不存在。
7 void ifPresent(Consumer<? super T> consumer)
如果值存在,調(diào)用指定的使用方提供值,否則什么都不做。
8 boolean isPresent()
返回true,如果有一個值存在,否則為false。
9 <U> Optional<U> map(Function<? super T,? extends U> mapper)
如果值存在,應(yīng)用提供的映射函數(shù),如果結(jié)果非空,返回一個Optional描述結(jié)果。
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)
如果存在,返回值,否則調(diào)用其他并返回調(diào)用的結(jié)果。
14 <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
返回所含值,如果存在的話,否則拋出將由提供者創(chuàng)建的一個例外。
15 String toString()
返回此Optional適合調(diào)試一個非空字符串表示。

方法繼承

這個類從以下類繼承的方法:

  • java.lang.Object

Optional 例子

選擇使用任何編輯器創(chuàng)建以下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;
   }	
}

驗證結(jié)果

使用javac編譯器編譯如下類

C:\JAVA>javac Java8Tester.java

現(xiàn)在運行Java8Tester看到的結(jié)果

C:\JAVA>java Java8Tester

看到結(jié)果。

First parameter is present: false
Second parameter is present: true
10