對物件進行空判斷,之後進行一些列附加操作(多重判斷,操作之後返回新的物件)的優雅實現,避免了以往**不夠模組化/易讀性差等問題,其中大量使用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...