之前遇到過使用optional之後帶來的隱含bug,現在強調記錄一下不好的用法,防止錯用。
這點尤為重要,即類要純粹。如果是pojo就原始型別就可以了,如果是領域物件,則更不應該使用optional作為field。
另一種不太適合使用optional的情況是將該型別作為方法或者建構函式的引數,這將導致不必要的**複雜化。
user user = new user("[email protected]", "1234", optional.empty());
而且,內部如果忘記ispresent
,會得到nosuchelementexception
。所以
相反,使用方法過載(method overloading)來處理非強制性引數要方便得多。
使用optional作為返回值可以增強stream處理,構建流式api. 比如,findfirst()
就是返回乙個optional
物件。
@test
public void whenemptystream_thenreturndefaultoptional()
級聯呼叫是危險的,很容易產生空指標。比如
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()
eugen是一名軟體工程師,對spring、rest api、安全和教育擁有極大熱情。同時,他還是baeldung(推特賬號@baeldung)的創始人。 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...