日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

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

來源: 責(zé)編: 時間:2024-02-01 12:41:35 191觀看
導(dǎo)讀在Java應(yīng)用程序中,空指針異常是導(dǎo)致程序失敗的最常見原因之一。為了更加優(yōu)雅地處理空指針異常,Java8引入了Optional類庫。Optional實(shí)際上是一個容器,可以保存類型T的值,或者僅僅保存null。通過使用Optional,我們能夠避免顯

在Java應(yīng)用程序中,空指針異常是導(dǎo)致程序失敗的最常見原因之一。為了更加優(yōu)雅地處理空指針異常,Java8引入了Optional類庫。Optional實(shí)際上是一個容器,可以保存類型T的值,或者僅僅保存null。通過使用Optional,我們能夠避免顯式進(jìn)行空值檢測,使代碼更加清晰和健壯。XXv28資訊網(wǎng)——每日最新資訊28at.com

1.Optional類是什么?

Optional 類(java.util.Optional) 是一個容器類,它可以保存類型T的值,代表這個值存在。或者僅僅保存null,表示這個值不存在。原來用 null 表示一個值不存在,現(xiàn)在 Optional 可以更好的表達(dá)這個概念。并且可以避免空指針異常。XXv28資訊網(wǎng)——每日最新資訊28at.com

Optional提供很多有用的方法,這樣我們就不用顯式進(jìn)行空值檢測。XXv28資訊網(wǎng)——每日最新資訊28at.com

2. 創(chuàng)建Optional對象

Java8提供了兩種方式來創(chuàng)建Optional對象:XXv28資訊網(wǎng)——每日最新資訊28at.com

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

3. 判斷值是否存在

使用isPresent()方法可以判斷Optional對象中的值是否存在。XXv28資訊網(wǎng)——每日最新資訊28at.com

Optional<Integer> optional1 = Optional.ofNullable(1);Optional<Integer> optional2 = Optional.ofNullable(null);System.out.println(optional1.isPresent()); // trueSystem.out.println(optional2.isPresent()); // false

4. 如果值存在,則執(zhí)行操作

ifPresent(Consumer consumer)方法,可以在Optional對象保存的值不為null時執(zhí)行指定的操作XXv28資訊網(wǎng)——每日最新資訊28at.com

Optional<Integer> optional1 = Optional.ofNullable(1);Optional<Integer> optional2 = Optional.ofNullable(null);// 如果不是null,調(diào)用Consumeroptional1.ifPresent(value -> System.out.println("value is " + value));// null,不調(diào)用Consumeroptional2.ifPresent(value -> System.out.println("value is " + value));

輸出結(jié)果:XXv28資訊網(wǎng)——每日最新資訊28at.com

value is 1

5. 獲取值或默認(rèn)值

orElse(value)方法,可以在Optional對象保存的值不為null時返回原來的值,否則返回指定的默認(rèn)值XXv28資訊網(wǎng)——每日最新資訊28at.com

Optional<Integer> optional1 = Optional.ofNullable(1);Optional<Integer> optional2 = Optional.ofNullable(null);System.out.println(optional1.orElse(1000)); // 1System.out.println(optional2.orElse(1000)); // 1000

6. 異常處理

orElseThrow()方法可以在值不存在時拋出異常,存在時什么都不做,類似于Guava的PrecoditionsXXv28資訊網(wǎng)——每日最新資訊28at.com

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對象中保存的值進(jìn)行過濾和映射XXv28資訊網(wǎng)——每日最新資訊28at.com

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()); // falseSystem.out.println(filter2.isPresent()); // trueSystem.out.println(filter2.get().intValue() == 1); // trueSystem.out.println(filter3.isPresent()); // falseOptional<String> str1Optional = optional1.map(a -> "key" + a);Optional<String> str2Optional = optional2.map(a -> "key" + a);System.out.println(str1Optional.get()); // key1System.out.println(str2Optional.isPresent()); // false

8. flatMap操作

flatMap()方法與map()相似,不同之處在于flatMap()的mapping函數(shù)返回值必須是Optional類型XXv28資訊網(wǎng)——每日最新資訊28at.com

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()); // key1System.out.println(str2Optional.get()); // key1

9. Optional類的方法總結(jié)

方法
XXv28資訊網(wǎng)——每日最新資訊28at.com

描述
XXv28資訊網(wǎng)——每日最新資訊28at.com

empty
XXv28資訊網(wǎng)——每日最新資訊28at.com

返回一個空的 Optional 實(shí)例
XXv28資訊網(wǎng)——每日最新資訊28at.com

of
XXv28資訊網(wǎng)——每日最新資訊28at.com

將指定值用 Optional 封裝之后返回,如果該值為 null,則拋出一個 NullPointerException 異常
XXv28資訊網(wǎng)——每日最新資訊28at.com

ofNullable
XXv28資訊網(wǎng)——每日最新資訊28at.com

將指定值用 Optional 封裝之后返回,如果該值為 null,則返回一個空的 Optional 對象
XXv28資訊網(wǎng)——每日最新資訊28at.com

orElse
XXv28資訊網(wǎng)——每日最新資訊28at.com

如果有值則將其返回,否則返回一個默認(rèn)值
XXv28資訊網(wǎng)——每日最新資訊28at.com

orElseThrow
XXv28資訊網(wǎng)——每日最新資訊28at.com

如果有值則將其返回,否則拋出一個由指定的 Supplier 接口生成的異常
XXv28資訊網(wǎng)——每日最新資訊28at.com

filter
XXv28資訊網(wǎng)——每日最新資訊28at.com

如果值存在并且滿足提供的斷言, 就返回包含該值的 Optional 對象;否則返回一個空的 Optional 對象
XXv28資訊網(wǎng)——每日最新資訊28at.com

map
XXv28資訊網(wǎng)——每日最新資訊28at.com

如果值存在,就對該值執(zhí)行提供的 mapping 函數(shù)調(diào)用
XXv28資訊網(wǎng)——每日最新資訊28at.com

flatMap
XXv28資訊網(wǎng)——每日最新資訊28at.com

如果值存在,就對該值執(zhí)行提供的 mapping 函數(shù)調(diào)用,返回一個 Optional 類型的值,否則就返 回一個空的 Optional 對象
XXv28資訊網(wǎng)——每日最新資訊28at.com


XXv28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-70386-0.htmlOptional類的使用指南:解決空指針異常

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 因天氣情況,申通快遞對發(fā)往 12 省份快件提價:3 公斤以上每公斤漲 1-3 元

下一篇: 一文了解this指針的奧秘

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 集安市| 博罗县| 四川省| 昆明市| 古田县| 景洪市| 城市| 芦溪县| 六盘水市| 古丈县| 武乡县| 浦江县| 嵊泗县| 于都县| 东乌珠穆沁旗| 德兴市| 阜南县| 霍州市| 芦溪县| 玉树县| 武安市| 杭锦旗| 南汇区| 抚州市| 武穴市| 乐都县| 卓资县| 博客| 高平市| 东丰县| 玉屏| 三台县| 霍山县| 巴林右旗| 临邑县| 那坡县| 西畴县| 湘乡市| 铁力市| 宣威市| 丘北县|