Java中Optional使用注意事項

2021-09-22 06:58:26 字數 1069 閱讀 3407

之前遇到過使用optional之後帶來的隱含bug,現在強調記錄一下不好的用法,防止錯用。

這點尤為重要,即類要純粹。如果是pojo就原始型別就可以了,如果是領域物件,則更不應該使用optional作為field。

另一種不太適合使用optional的情況是將該型別作為方法或者建構函式的引數,這將導致不必要的**複雜化。

user user = new

user("[email protected]"

, "1234"

, optional.empty());

相反,使用方法過載(method overloading)來處理非強制性引數要方便得多。

級聯呼叫是危險的,很容易產生空指標。比如

string isocode = user.getaddress().getcountry().getisocode().touppercase();

在傳統做法裡,

if

(user != null

) }

}}

使用optional可以精簡**,降低複雜度:

string result = optional.ofnullable(user)

.flatmap(user::getaddress)

.flatmap(address::getcountry)

.map(country::getisocode)

.orelse("default"

);

optional類對我們最有幫助的乙個用例是同stream或者其他方法組合使用,這些方法會返回乙個可構建流暢api的optional值。如果僅僅作為判空,那麼不要使用optional,直接判null就好。

比如,使用stream 的optional物件的例子:

@test

public

void

whengetstream_thenok()

Java中Optional使用注意事項

之前遇到過使用optional之後帶來的隱含bug,現在強調記錄一下不好的用法,防止錯用。這點尤為重要,即類要純粹。如果是pojo就原始型別就可以了,如果是領域物件,則更不應該使用optional作為field。另一種不太適合使用optional的情況是將該型別作為方法或者建構函式的引數,這將導致不...

Optional 物件的使用

optional optional optional.of 必須為非空 optional.ofnullable 可以為空也可以為非空 optional.empty 引數包裝成null物件 例子一 returnoptional.of user optional.ispresent 如果值存在的話,進行...

Optional類基本使用

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