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

當前位置:首頁 > 科技  > 軟件

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

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

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

1.Optional類是什么?

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

Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測。6s228資訊網——每日最新資訊28at.com

2. 創建Optional對象

Java8提供了兩種方式來創建Optional對象:6s228資訊網——每日最新資訊28at.com

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

3. 判斷值是否存在

使用isPresent()方法可以判斷Optional對象中的值是否存在。6s228資訊網——每日最新資訊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. 如果值存在,則執行操作

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

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

輸出結果:6s228資訊網——每日最新資訊28at.com

value is 1

5. 獲取值或默認值

orElse(value)方法,可以在Optional對象保存的值不為null時返回原來的值,否則返回指定的默認值6s228資訊網——每日最新資訊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的Precoditions6s228資訊網——每日最新資訊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對象中保存的值進行過濾和映射6s228資訊網——每日最新資訊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函數返回值必須是Optional類型6s228資訊網——每日最新資訊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類的方法總結

方法
6s228資訊網——每日最新資訊28at.com

描述
6s228資訊網——每日最新資訊28at.com

empty
6s228資訊網——每日最新資訊28at.com

返回一個空的 Optional 實例
6s228資訊網——每日最新資訊28at.com

of
6s228資訊網——每日最新資訊28at.com

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

ofNullable
6s228資訊網——每日最新資訊28at.com

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

orElse
6s228資訊網——每日最新資訊28at.com

如果有值則將其返回,否則返回一個默認值
6s228資訊網——每日最新資訊28at.com

orElseThrow
6s228資訊網——每日最新資訊28at.com

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

filter
6s228資訊網——每日最新資訊28at.com

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

map
6s228資訊網——每日最新資訊28at.com

如果值存在,就對該值執行提供的 mapping 函數調用
6s228資訊網——每日最新資訊28at.com

flatMap
6s228資訊網——每日最新資訊28at.com

如果值存在,就對該值執行提供的 mapping 函數調用,返回一個 Optional 類型的值,否則就返 回一個空的 Optional 對象
6s228資訊網——每日最新資訊28at.com


6s228資訊網——每日最新資訊28at.com

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

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

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

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

標簽:
  • 熱門焦點
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • 三星Galaxy Z Fold5今日亮相:厚度縮減但仍略顯厚重

    據官方此前宣布,三星將于7月26日也就是今天在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
Top 主站蜘蛛池模板: 垫江县| 桦甸市| 绥芬河市| 盐源县| 民权县| 天等县| 阿荣旗| 淮滨县| 江山市| 阿城市| 和政县| 台北县| 洪雅县| 婺源县| 亚东县| 安徽省| 大英县| 宁武县| 渝中区| 包头市| 冷水江市| 新和县| 文成县| 阳春市| 金沙县| 鸡泽县| 涟源市| 西昌市| 彰化市| 衡阳市| 凤山县| 甘洛县| 仙居县| 河北区| 襄樊市| 滁州市| 雷波县| 固安县| 舟曲县| 衡东县| 合作市|