![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaucDN1YGNwEWOxEDNkdDOxkTNjVTYkBTZjJWM2EjM5kDZfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
之前遇到過使用Optional之後帶來的隐含bug,現在強調記錄一下不好的用法,防止錯用。
這點尤為重要,即類要純粹。如果是POJO就原始類型就可以了,如果是領域對象,則更不應該使用Optional作為field。
另一種不太适合使用Optional的情況是将該類型作為方法或者構造函數的參數,這将導緻不必要的代碼複雜化。
相反,使用方法重載(method overloading)來處理非強制性參數要友善得多。
級聯調用是危險的,很容易産生空指針。比如
在傳統做法裡,
使用Optional可以精簡代碼,降低複雜度:
Optional類對我們最有幫助的一個用例是同Stream或者其他方法組合使用,這些方法會傳回一個可建構流暢API的Optional值。如果僅僅作為判空,那麼不要使用Optional,直接判null就好。
比如,使用Stream 的Optional對象的例子:
關于作者:
唯有不斷學習方能改變!
-- <b>Ryan Miao</b>