在Java 8中,引入了新的類Optional,它是一個容器類,代表一個值存在或不存在,我們可以使用它來避免空指針異常。在這篇文章中,我們將討論Java 8中的Optional類以及它的使用方法。
Optional的介紹
在Java中,我們經常需要處理一些有可能為空的值,例如數據庫查詢結果返回空或者讀取配置文件中的屬性可能為空等。在以前,我們通常會通過判斷是否為null來解決這些問題,但是這樣會導致許多冗餘的代碼和重複的邏輯。在Java 8中,引入了Optional類來解決這個問題。
Optional類是一個容器類,它可以包含一個非空的值,也可以不包含任何值。當Optional包含一個非空的值時,我們稱其為存在的值,當Optional不包含任何值時,我們稱其為空的值。Optional提供了一組方法來安全地訪問這個值,避免因為空指針異常而導致程序的崩潰。
Optional的使用方法
創建一個Optional對象
我們可以通過調用靜態方法Optional.of(value)來創建一個包含非空值的Optional對象,如果value為null,則會拋出NullPointerException。
Optional optional = Optional.of("hello");
我們也可以通過調用靜態方法Optional.empty()來創建一個空的Optional對象:
Optional
除此之外,我們還可以通過調用靜態方法Optional.ofNullable(value)來創建Optional對象,如果value為null,則這個Optional對象不包含任何值。
String str = null; Optional optional = Optional.ofNullable(str);
訪問Optional對象的值
Optional類提供了以下方法來訪問Optional對象的值:
- get():返回Optional對象的值
- orElse(T other):如果Optional對象不包含任何值,則返回other,否則返回Optional對象的值
- orElseGet(Supplier supplier):如果Optional對象不包含任何值,則返回supplier.get()的值,否則返回Optional對象的值
- orElseThrow(Supplier exceptionSupplier):如果Optional對象不包含任何值,則拋出exceptionSupplier提供的異常,否則返回Optional對象的值
它們的使用方法如下:
Optional optional = Optional.of("hello"); String value = optional.get(); // 返回"hello" String other = "world"; String result = optional.orElse(other); // 返回"hello" String value1 = optional.orElseGet(() -> other); // 返回"hello" String value2 = optional.orElseThrow(() -> new RuntimeException("value is null")); // 返回"hello"
Optional的 Mapping 方法
Optional還提供了一組Mapping方法,它們可以將Optional對象中的值進行轉換或者扁平化處理:
- map(Function mapper):將Optional對象中的值進行轉換,返回一個新的Optional對象
- flatMap(Function<? super T, Optional> mapper):將Optional對象中的值進行扁平化處理,返回一個新的Optional對象
它們的使用如下所示:
Optional optional = Optional.of("hello"); Optional lengthOptional = optional.map(String::length); // lengthOptional的值為Optional[5] Optional flatLengthOptional = optional.flatMap(s -> Optional.of(s.length())); // flatLengthOptional的值為Optional[5]
Optional的 Filter 方法
Optional還提供了一個Filter方法,它可以過濾Optional對象中的值,返回一個新的Optional對象或者空的Optional對象:
Optional optional = Optional.of("hello"); Optional filteredOptional = optional.filter(s -> s.startsWith("h")); // 返回Optional["hello"] Optional emptyOptional = optional.filter(s -> s.startsWith("w")); // 返回Optional.empty
Optional的使用場景
Optional並不是一個萬能的工具,也並不是所有場景都適合使用Optional。我們應該根據具體的場景來決定是否使用Optional。
下面是一些使用Optional的場景:
- 方法返回值:我們可以使用Optional來指示一個方法的返回值可能為空
- 集合中的元素:在集合中存儲Optional對象的引用,而不是空對象或者null
- 讀取配置屬性:使用Optional可以避免空指針異常導致程序崩潰
總結
本文介紹了Java 8中的Optional類以及它的使用方法,包括創建Optional對象、訪問Optional對象的值、Mapping方法、Filter方法以及Optional的使用場景。使用Optional可以有效地避免空指針異常,減少冗餘的代碼和重複的邏輯,提高程序的可讀性和可維護性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/246818.html