Optional工具類學習

2021-10-08 14:54:42 字數 3065 閱讀 1169

對物件進行空判斷,之後進行一些列附加操作(多重判斷,操作之後返回新的物件)的優雅實現,避免了以往**不夠模組化/易讀性差等問題,其中大量使用objects工具類和函式式介面。

類私有常量,多用於返回不含值的optional物件

private

static

final optional<

?> empty =

newoptional

<

>()

;

optional 物件儲存的值

private

final t value;

作為乙個工具類,它隱去了構造方法的直接引用,通過提供的限制方法來建立物件來規範化操作。

返回預設的空物件empty,全域性唯一,多處使用,避免重複建立資源帶來的效能和資源消耗。

呼叫私有的有參構造方法,並對傳入的值用objects工具類進行校驗。

public

static

optional

of(t value)

private

optional

(t value)

就是傳入的value值不能為null,否則會丟擲nullpointerexception

public

static

t requirenonnull

(t obj)

此方法是of方法的相容版本,允許傳入的引數為空,當傳入為空的時候執行optional.empty(),否則執行optional.of(value),用於在情況不明的情況下來構建物件。

public

static

optional

ofnullable

(t value)

判斷值存不存在,只要正常初始化就可以呼叫,不用擔心nep問題

public

boolean

ispresent()

判斷儲存的值是否等於給定的值,同樣不用擔心nep問題,但是傳入的物件畢業夜市被optional類包裝過的,其他就是呼叫·objects.equals()·進行判斷了,不熟悉這個類的同學可以多了解了解

@override

public

boolean

equals

(object obj)if(

!(obj instanceof

optional))

optional<

?> other =

(optional<

?>

) obj;

return objects.

equals

(value, other.value)

;}

此處我們假定構建了類optional的物件optional

不允許初始化後沒有值的情況下呼叫,所以必須確保value != null,否則會丟擲nep。

public t get()

return value;

}

此方法是對上面方法的補充,允許value == null,此時可以返回乙個自定義的備用物件。

public t orelse

(t other)

此方法是對獲取內容為空時異常的補充,如果值存在正常獲取值,不存在的返回自定義異常

public

throwable

> t orelsethrow

(supplier<

?extends

x> exceptionsupplier)

throws x

else

}

當值存在時,對儲存值進行處理,不建議對其他物件進行處理。引數為乙個方法介面,實現其accept方法

public

void

ifpresent

(consumer<

?super t> consumer)

補充判斷,當必須有值,再次判斷是否滿足條件,如果滿足,則返回當前optional物件;如果不滿足,則返回乙個值為null的optional 物件。引數不能為空,否則會丟擲空指標異常

public optional

filter

(predicate<

?super t> predicate)

只有有值時才會操作,返回乙個新的物件,自己寫方法實現時只需要返回自己的物件,可以為null;否則會返回當前optional物件

public optional

filter

(predicate<

?super t> predicate)

5.7 optional.flatmap

是對·optional.map()·方法的嚴格限制,但是我感覺這個方法寫的有問題,目前你的實現需要返回乙個optional物件,而且不能為空,也就是可以包含值也可以不包含,與optional.map()最終有什麼區別呢,無非少些乙個包裝返回值的問題,以上均為個人拙見,如有問題,請不吝賜教

public

optional

flatmap

(function<

?super t, optional

}

注:以上均為個人見解,如果問題,請不吝賜教

Optional類基本使用

optional.of t t 建立乙個 optional 例項,t必須非空 optional.empty 建立乙個空的 optional 例項 optional.ofnullable t t t可以為nullboolean ispresent 判斷是否包含物件 void ifpresent con...

swift學習記錄(Optional)

對swift語法的陌生主要 於兩個地方,乙個是區別於其他語言的語法形式,比如c 中的int i 與swift中的var i int 另外乙個是語法的功能,swift中的語法功能千奇百怪。從這篇文章開始,主要通過閱讀與搜尋the swift programing language 來學習,記錄學習過程...

Optional類的map和flatMap的區別

1.區別 map方法接受乙個對映函式引數,返回乙個被optional包裝的結果。若結果為空,則返回空optional。flatmap方法接受乙個返回值為optional的對映函式引數,該返回值亦是flatmap方法的返回值。若結果為空,則返回空optional。2.示例 2.1 準備類 public...