您好,登錄后才能下訂單哦!
本篇內容主要講解“java8新特性Optinal的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java8新特性Optinal的作用是什么”吧!
空指針異常可能占據了一半的異常發生率。于是oracle想用optional這類‘優雅的’解決null。想象挺美好,現實很殘酷。顯然optional并沒有使代碼變得那么優雅。看了七八篇大神的博客,不管從代碼量或者代碼思想上都沒有什么質的改變,你仍然要時刻擔心null的出現及給它相應的處理。如果你想統一處理還不如直接代碼try catch 空指針異常。在我發現它真正對代碼的改善前,暫且不推薦(不過阿里推薦,還是人家牛,聽阿里的吧)
更新------------------------------------------------------
本著求真務實的精神,今天更加詳細分析一下optional的使用方法。(根據實際開發,理論玩家無視)。
1,首先是構造方法 Optional.of(), Optional.ofNullable() ,Optional.empty()。
Optional.of():of方法在傳入的參數為null時,拋出空指針異常。許多博客都說要在確定參數不為null時使用。可要是確定參數不為null,為什么要用Optional。個人觀點,Optional,的所有方法中,可能會拋出空指針異常的,都違背了使用Optional的初衷。如get()方法。
Optional.empty():構造一個空值值 optional,非特殊情況無使用價值。默認就使用ofNullable()方法構造。
2,各方法的使用
①isPresent() 根據是否為空返回boolean。一個挖坑又填坑的方法。直接判斷參數==null?不好嗎。
②ifPresent(Consumer) 在對象不為空時,執行Consumer(函數表達式),空時不執行。相當于if(obj==null){.....},的簡便寫法。你可能會說這也沒什么大用啊,我的硬盤又不在乎多一行代碼,再想寫個else都不行。這個。。。。你說的對。 但這已經是Optional中比較有用的方法了。
③get() 獲取optional中的值,空則拋出異常。前面說了,這個方法看不出來使用價值
④orElse(T other) 如果為空,用other替代。同樣可用一行if替代。但你可用來裝一下
⑤orElseThrow 如果為空拋出異常。不想評價它
⑥map 如果你從一個對象中想得到第若干層的子對象,每一層都要都要空值校驗如,Obj=obj1.get("obj2").get("obj3").get("obj4");上一個get方法返回的值為null時,下一個get方法執行時都會拋異常。于是就要寫若干層if。map則允許進行鏈式操作,在最后才處理null值。這是optional最值得使用的方法。
Optional.ofNullable(userEntity1).map(u -> u.getUsername()) .map(name -> name.toUpperCase()).orElse(null);
到此,相信大家對“java8新特性Optinal的作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。