之前遇到過使用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...