1. 程式人生 > >Java 8——Optional泛型類

Java 8——Optional泛型類

整理自http://www.importnew.com/6675.html

           http://www.cnblogs.com/WJ5888/p/4618465.html

一、Optional泛型包裝類

Optional類的目的是表示被Optional泛型包裝的型別有可能為空(null),並讓對這種情況作出處理。

新版本的Java 8引入了一個新的Optional類。Optional類的Javadoc描述如下:

這是一個可以為null的容器物件。如果值存在則isPresent()方法會返回true,呼叫get()方法會返回該物件。

本文會逐個探討Optional類包含的方法,並通過一兩個示例展示如何使用。

of

為非null的值建立一個Optional。

of方法通過工廠方法建立Optional類。需要注意的是,建立物件時傳入的引數不能為null。如果傳入引數為null,則丟擲NullPointerException 。

1 2 3 4 //呼叫工廠方法建立Optional例項 Optional<String> name = Optional.of("Sanaulla"); //傳入引數為null,丟擲NullPointerException. Optional<String> someNull = Optional.of(
null);

ofNullable

為指定的值建立一個Optional,如果指定的值為null,則返回一個空的Optional。

ofNullable與of方法相似,唯一的區別是可以接受引數為null的情況。示例如下:

1 2 3 //下面建立了一個不包含任何值的Optional例項 //例如,值為'null' Optional empty = Optional.ofNullable(null);

isPresent

非常容易理解

如果值存在返回true,否則返回false。

類似下面的程式碼:

1 2 3 4 5 //isPresent方法用來檢查Optional例項中是否包含值 if (name.isPresent()) { //在Optional例項內呼叫get()返回已存在的值 System.out.println(name.get());//輸出Sanaulla }

get

如果Optional有值則將其返回,否則丟擲NoSuchElementException。

上面的示例中,get方法用來得到Optional例項中的值。下面我們看一個丟擲NoSuchElementException的例子:

1 2 3 4 5 6 7 //執行下面的程式碼會輸出:No value present try { //在空的Optional例項上呼叫get(),丟擲NoSuchElementException System.out.println(empty.get()); } catch (NoSuchElementException ex) { System.out.println(ex.getMessage()); }

ifPresent

如果Optional例項有值則為其呼叫consumer,否則不做處理

要理解ifPresent方法,首先需要了解Consumer類。簡答地說,Consumer類包含一個抽象方法。該抽象方法對傳入的值進行處理,但沒有返回值。Java8支援不用介面直接通過lambda表示式傳入引數。

如果Optional例項有值,呼叫ifPresent()可以接受介面段或lambda表示式。類似下面的程式碼: