Java中Optional使用注意事項

2021-09-08 20:05:23 字數 1347 閱讀 5586

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