一、Optional簡介
Optional是Java 8中引入的一個新類,屬於java.util包下面,用來解決空指針異常問題。在我們日常開發過程中,空指針異常是比較常見的異常。尤其是當我們處理複雜的對象時,有可能會出現對象為空的情況。在Java 8之前,為了避免空指針異常,我們需要先判斷對象是否為空,再進行相應的操作。但是這種做法畢竟比較繁瑣。而Optional則是一種更加優雅的解決方案。
二、Optional的用法
1.創建Optional對象
Optional是一個泛型類,可以用來包裝任意類型的對象。下面是創建Optional對象的幾種方式:
//創建一個包裝了空值的Optional對象 Optional emptyOptional = Optional.empty(); //創建一個包裝了非空值的Optional對象 Optional strOptional = Optional.of("hello world"); //創建一個包裝了可空值的Optional對象 Optional nullableOptional = Optional.ofNullable(null);
2.獲取Optional對象中的值
獲取Optional對象中的值有兩種方式,一種是使用get()方法,另一種是使用orElse()方法。如果Optional對象中的值為空,使用get()方法會拋出NoSuchElementException異常,而使用orElse()方法則會返回一個默認值。
//直接獲取Optional對象中的值,如果值為空,拋出NoSuchElementException異常 String str1 = strOptional.get(); //獲取Optional對象中的值,如果值為空,返回一個默認值 String str2 = emptyOptional.orElse("default value");
3.判斷Optional對象中是否存在值
判斷Optional對象中是否存在值可以使用isPresent()方法。如果存在值則返回true,否則返回false。
boolean isPresent = strOptional.isPresent();
4.在Optional對象中執行操作
Optional對象提供了一些方法,可以在Optional對象中執行操作。這些方法包括:
4.1 ifPresent()
ifPresent()方法接收一個Consumer函數式介面作為參數,如果Optional對象中存在值,則執行該函數式介面,否則不做任何操作。
strOptional.ifPresent(s -> System.out.println(s));
4.2 filter()
filter()方法接收一個Predicate函數式介面作為參數,用來過濾Optional對象中的值。如果Predicate函數式介面返回true,則表示Optional對象中的值符合要求,否則表示不符合要求。
Optional filteredOptional = strOptional.filter(s -> s.length() > 10);
4.3 map()
map()方法接收一個Function函數式介面作為參數,用來對Optional對象中的值進行轉換。如果Optional對象中的值不為空,則將其傳入Function函數式介面,並返回一個新的Optional對象。
Optional lengthOptional = strOptional.map(s -> s.length());
4.4 flatMap()
flatMap()方法接收一個Function函數式介面作為參數,用來對Optional對象中的值進行轉換。和map()方法類似,不同的是,返回值類型是一個Optional對象。
Optional flatLengthOptional = strOptional.flatMap(s -> Optional.ofNullable(s.length()));
4.5 orElseGet()
orElseGet()方法和orElse()方法類似,不同的是,它接收一個Supplier函數式介面作為參數,用來返回一個默認值。
String orElseGetResult = emptyOptional.orElseGet(() -> "default value");
4.6 orElseThrow()
orElseThrow()方法和orElse()方法類似,不同的是,它會拋出一個指定的異常,而不是返回一個默認值。該方法接收一個Supplier函數式介面作為參數,用來返回一個異常實例。
String orElseThrowResult = emptyOptional.orElseThrow(() -> new IllegalArgumentException("value is null"));
三、Optional的優缺點
3.1 優點
- 解決空指針異常問題
- 提供一種優雅的寫法,避免了繁瑣的if判斷
3.2 缺點
- 可能會引起一些新的問題,如當我們使用Optional對象時,可能會忘記檢查是否存在值,從而導致NoSuchElementException異常。
- 需要學習一些新的概念,如容器、流等。
四、總結
本文介紹了Java 8中的Optional類,包括創建Optional對象、獲取Optional對象中的值、判斷Optional對象中是否存在值、在Optional對象中執行操作、Optional的優缺點等方面。Optional是一種解決空指針異常問題的優雅方式,但是它也存在著一些缺點。在使用Optional時,需要注意它的特點,並且掌握一些必要的概念,才能更好的發揮它的作用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/191007.html