成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Optional類的使用指南:解決空指針異常

開發 前端
Optional 類(java.util.Optional) 是一個容器類,它可以保存類型T的值,代表這個值存在。或者僅僅保存null,表示這個值不存在。原來用 null 表示一個值不存在,現在 Optional 可以更好的表達這個概念。并且可以避免空指針異常。

在Java應用程序中,空指針異常是導致程序失敗的最常見原因之一。為了更加優雅地處理空指針異常,Java8引入了Optional類庫。Optional實際上是一個容器,可以保存類型T的值,或者僅僅保存null。通過使用Optional,我們能夠避免顯式進行空值檢測,使代碼更加清晰和健壯。

1.Optional類是什么?

Optional 類(java.util.Optional) 是一個容器類,它可以保存類型T的值,代表這個值存在。或者僅僅保存null,表示這個值不存在。原來用 null 表示一個值不存在,現在 Optional 可以更好的表達這個概念。并且可以避免空指針異常。

Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測。

2. 創建Optional對象

Java8提供了兩種方式來創建Optional對象:

  • Optional.of():of()不允許參數是null
  • Optional.ofNullable():ofNullable()則沒有限制
// 參數不能是null
Optional optional1 = Optional.of(1);
// ofNullable參數可以是null
Optional optional2 = Optional.ofNullable(null);
// ofNullable參數也可以不是null
Optional optional3 = Optional.ofNullable(2);

3. 判斷值是否存在

使用isPresent()方法可以判斷Optional對象中的值是否存在。

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);

System.out.println(optional1.isPresent()); // true
System.out.println(optional2.isPresent()); // false

4. 如果值存在,則執行操作

ifPresent(Consumer consumer)方法,可以在Optional對象保存的值不為null時執行指定的操作

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);

// 如果不是null,調用Consumer
optional1.ifPresent(value -> System.out.println("value is " + value));

// null,不調用Consumer
optional2.ifPresent(value -> System.out.println("value is " + value));

輸出結果:

value is 1

5. 獲取值或默認值

orElse(value)方法,可以在Optional對象保存的值不為null時返回原來的值,否則返回指定的默認值

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);

System.out.println(optional1.orElse(1000)); // 1
System.out.println(optional2.orElse(1000)); // 1000

6. 異常處理

orElseThrow()方法可以在值不存在時拋出異常,存在時什么都不做,類似于Guava的Precoditions

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);

optional1.orElseThrow(() -> new IllegalStateException());

try {
    optional2.orElseThrow(() -> new IllegalStateException());
} catch (IllegalStateException e) {
    e.printStackTrace();
}

7. 過濾和映射操作

Optional類還提供了filter(Predicate)和map(Function)方法,用于對Optional對象中保存的值進行過濾和映射

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);

Optional<Integer> filter1 = optional1.filter(a -> a == null);
Optional<Integer> filter2 = optional1.filter(a -> a == 1);
Optional<Integer> filter3 = optional2.filter(a -> a == null);

System.out.println(filter1.isPresent()); // false
System.out.println(filter2.isPresent()); // true
System.out.println(filter2.get().intValue() == 1); // true
System.out.println(filter3.isPresent()); // false

Optional<String> str1Optional = optional1.map(a -> "key" + a);
Optional<String> str2Optional = optional2.map(a -> "key" + a);

System.out.println(str1Optional.get()); // key1
System.out.println(str2Optional.isPresent()); // false

8. flatMap操作

flatMap()方法與map()相似,不同之處在于flatMap()的mapping函數返回值必須是Optional類型

Optional<Integer> optional1 = Optional.ofNullable(1);

Optional<Optional<String>> str1Optional = optional1.map(a -> Optional.of("key" + a));
Optional<String> str2Optional = optional1.flatMap(a -> Optional.of("key" + a));

System.out.println(str1Optional.get().get()); // key1
System.out.println(str2Optional.get()); // key1

9. Optional類的方法總結

方法

描述

empty

返回一個空的 Optional 實例

of

將指定值用 Optional 封裝之后返回,如果該值為 null,則拋出一個 NullPointerException 異常

ofNullable

將指定值用 Optional 封裝之后返回,如果該值為 null,則返回一個空的 Optional 對象

orElse

如果有值則將其返回,否則返回一個默認值

orElseThrow

如果有值則將其返回,否則拋出一個由指定的 Supplier 接口生成的異常

filter

如果值存在并且滿足提供的斷言, 就返回包含該值的 Optional 對象;否則返回一個空的 Optional 對象

map

如果值存在,就對該值執行提供的 mapping 函數調用

flatMap

如果值存在,就對該值執行提供的 mapping 函數調用,返回一個 Optional 類型的值,否則就返 回一個空的 Optional 對象


責任編輯:武曉燕 來源: springboot葵花寶典
相關推薦

2024-02-01 12:09:17

Optional容器null

2023-10-08 11:09:22

Optional空指針

2024-12-06 10:12:20

2024-08-12 08:28:35

2024-10-15 15:58:11

2010-02-02 15:01:59

C++成員函數指針

2011-07-01 14:28:47

Qt 指針

2024-05-11 15:08:33

JavaScriptJava指針

2022-09-29 09:07:08

DataGrip數據倉庫數據庫

2022-01-19 09:00:00

Java空指針開發

2017-09-23 15:28:32

JavaOptional方法

2023-08-04 08:52:52

Optional消滅空指針

2021-11-15 06:56:45

系統運行空指針

2011-07-21 14:57:34

jQuery Mobi

2009-12-28 17:40:10

WPF TextBox

2021-07-27 10:09:27

鴻蒙HarmonyOS應用

2010-09-06 14:24:28

ppp authent

2012-12-26 12:41:14

Android開發WebView

2020-12-28 06:20:27

OptionalTryjava

2015-07-30 10:12:32

JavaNullAssert
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区在线播放 | 欧美日日 | 国产精品久久久久久久一区探花 | 国产免费一区二区 | 天天干天天爱天天操 | 天天爽天天干 | 亚洲色图综合 | 国产精品久久久久久久久久久久午夜片 | 一区二区三区视频在线 | 在线观看国产视频 | 精品96久久久久久中文字幕无 | 亚洲区一| 亚洲精品视频一区二区三区 | 亚洲一区二区av | 亚洲va国产日韩欧美精品色婷婷 | 高清视频一区二区三区 | 欧美一区精品 | 国产精品毛片一区二区在线看 | 九九热在线免费视频 | 国内精品伊人久久久久网站 | 中文字幕精品视频在线观看 | 日韩欧美精品 | 欧美在线观看免费观看视频 | 国产高清视频一区 | 久久久久久国产精品mv | 亚洲 欧美 日韩在线 | 国产乱码久久久久久 | 日韩综合| 欧美 日韩精品 | japan21xxxxhd美女 日本欧美国产在线 | 免费精品在线视频 | 亚洲网站观看 | 日本欧美大片 | 一级片免费视频 | 久久久综合精品 | 日日夜精品视频 | 91国内产香蕉 | 日韩不卡三区 | 亚洲精品日韩综合观看成人91 | 久久国产精品无码网站 | 午夜精品久久久久久久 |