講講Java8的Optional類
阿新 • • 發佈:2021-01-13
# 前言
Java 8中引入了 `Optional` 類來解決 `NullPointerException` 與繁瑣的 `null` 檢查,該類首次出現在 `Guava`。Java 8 才成為類庫中的一部分。
# 入門
`Optional` 是一個封裝值的類,用於儲存型別為 `T` 的值;本質上,`Optional` 就是一個容器。
舉例來說,一個人可能有車也可能沒有,那麼 `Person` 類內部 `car` 變數就不應該宣告為 `Car`,當變數存在時,`Optional` 類只是對 `Car` 的簡單封裝。變數不存在時,會使用 `Optional.empty()` 方法返回空的 `Optional` 物件。如下所示:
![](https://img2020.cnblogs.com/blog/2243394/202101/2243394-20210113100458164-1765643102.png)
但是 `null` 引用和 `Optional.empty()` 有什麼本質區別?從語義上,它們可以當成一回事兒,但實際上差別非常大:如果嘗試解引用一個 `null`,一定會觸發 `NullPointerException`,不過使用 `Optional.empty()` 是一個有效的物件。
下面我們來看一下 `Optional` 提供的功能。
# 建立
說到 `Optional` 的功能,我們首先要了解 `Optional` 例項的建立。
## 空Optional
正如前文提到,你可以通過靜態工廠方法 `Optional.empty`,建立一個空的 `Optional` 物件:
```java