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

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

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

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

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

1.Optional類是什么?

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

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

2. 創建Optional對象

Java8提供了兩種方式來創建Optional對象:COn28資訊網——每日最新資訊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對象中的值是否存在。COn28資訊網——每日最新資訊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時執行指定的操作COn28資訊網——每日最新資訊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));

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

value is 1

5. 獲取值或默認值

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • 一個注解實現接口冪等,這樣才優雅!

    場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 品牌洞察丨服務本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現&ldquo;美團直播&rdquo;的固定入口。在直播聚合頁面,外賣&ldquo;神槍手&rdquo;直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
Top 主站蜘蛛池模板: 抚顺市| 福贡县| 喜德县| 白银市| 扶沟县| 宁晋县| 巩义市| 尖扎县| 陵川县| 依兰县| 昌乐县| 平和县| 武汉市| 连江县| 龙岩市| 泰来县| 泾阳县| 曲松县| 翼城县| 旬阳县| 苍梧县| 关岭| 贵南县| 灌南县| 南投县| 永州市| 二连浩特市| 芷江| 女性| 南溪县| 乌鲁木齐市| 全州县| 石林| 吉木萨尔县| 松潘县| 隆昌县| 敖汉旗| 军事| 汾西县| 南京市| 佳木斯市|