Java8 Optional類

Optional用於包含非空對象的容器對象。Optional對象,用於表示使用不存在null值。這個類有各種實用的方法,以方便代碼來處理爲可用或不可用,而不是檢查null值。它是Java引入, 是類似於在 Guava 中的 Optional 。

類聲明

以下是java.util.Optional類的聲明:

public final class Optional<T> extends Object

類方法

S.N.

方法及說明

1

static Optional empty()
返回一個空的 Optional 實例。

2

boolean equals(Object obj)
表示某個其他對象是否「等於」此Optional。

3

Optional filter(Predicate<? super T> predicate)
如果值存在,並且該值給定的謂詞匹配,返回一個可選描述值,否則返回一個空Optional。

4

Optional flatMap(Function<? super T,Optional> mapper)
如果值存在,應用提供的可選承載映射功能到它,返回結果,否則返回一個空Optional。

5

T get()
如果值是出現在這個 Optional 中,返回這個值,否則拋出NoSuchElementException異常。

6

int hashCode()
返回當前值,哈希碼值(如有)或0(零),如果值不存在。

7

void ifPresent(Consumer<? super T> consumer)
如果值存在,調用指定的使用方提供值,否則什麼都不做。

8

boolean isPresent()
返回true,如果有一個值存在,否則爲false。

9

Optional map(Function<? super T,? extends U> mapper)
如果值存在,應用提供的映射函數,如果結果非空,返回一個Optional描述結果。

10

static Optional of(T value)
返回一個Optional具有指定當前非空值。

11

static Optional ofNullable(T value)
返回一個Optional描述指定的值,如果非空,否則返回一個空的Optional。

12

T orElse(T other)
返回值(如果存在),否則返回other。

13

T orElseGet(Supplier<? extends T> other)
如果存在,返回值,否則調用其他並返回調用的結果。

14

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