一、前言
在 Java 的世界裡, NullPointerException (NPE) 一直是開發者們揮之不去的夢魘。在 Java 8 之前,我們通常使用繁瑣的 if 語句來檢查物件是否為空,這種方式不僅使程式碼變得冗長,還容易遺漏檢查,導致程式在執行時拋出 NPE。為了解決這個問題,Java 8 引入了 java.util.Optional 類別。
Optional 的出現並非為了完全取代 null,而是提供了一種更加安全、優雅的方式來處理可能為空的值,它強制開發者思考潛在的空值情況,並主動處理它們,從而減少 NPE 的發生。從 Java 8 到 Java 17,Optional 的概念沒有發生根本性的改變,但是一些 API 和使用場景得到了進一步的完善。本文將梳理 Java 7 到 17 中 Optional 的演進,以便讀者更好地理解和使用它。
目錄
- 一、前言
- 二、Java 7 及之前的 null 處理問題
-
三、Java 8 引入 Optional 類別
- (3.1) Optional.of(T value):
- (3.2) Optional.ofNullable(T value):
- (3.3) Optional.empty():
- (3.4) isPresent():
- (3.5) get():
- (3.6) orElse(T other):
- (3.7) orElseGet(Supplier<? extends T> other):
- (3.8) orElseThrow(Supplier<? extends X> exceptionSupplier):
- (3.9) ifPresent(Consumer<? super T> consumer):
- (3.10) map(Function<? super T, ? extends U> mapper):
- (3.11) flatMap(Function<? super T, Optional<U>> mapper):
- 四、Java 9 和 Java 10 中 Optional 的增強
- 五、Java 11 到 Java 17 的 Optional 變化
- 六、總結
