2021/03/25

[筆記] Effective Java #55 謹慎回傳 optional

Effective Java 3rd 簡體中文版筆記 #55 謹慎回傳 optional
在 Java 8 之前,如果無法回傳一有效物件,可以回傳 null 或是丟出例外,但是這兩種方式都不夠完美。回傳為 null 時,調用者就必須對收到 null 情況來處理,如果忘記就很可能會丟出 NullPointerException
Java 8 提出第三種方式 Optional<T>,它可以儲存 T 或是什麼都沒有,沒有任何內容的稱作空 (empty),反之則為存在 (present)。Optional.of(value),當 value 為 null 時,會丟出 NullPointerException,這時應該使用 Optional.ofNullable(value),就會回傳一空的 Optional。不要在回傳類型為 Optional 的方法上回傳 null,這樣完全違反它的本意。

那該如何決定要回傳 Optional 或是 null 還是該丟出例外? Optional 本質上與受檢例外(checked exception) 相同,它會強迫調用者要處理回傳為 null 的情況。CollectionStream、陣列及 Optional 等都不應該被包裝在 Optional 中,應以空的該容器類作為回傳。何時該回傳 Optional<T> 而非 T? 如果無法回傳結果並且在沒有回傳結果時,調用者必須執行特殊的處理,這時就應該使用 Optional<T> 來回傳。
另外,也不要讓 Optional 成為 Map 的 key、value、集合或是陣列的元素。

轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/03/effective-java-55-optional.html

沒有留言:

張貼留言