91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Java8中使用Optional干掉空指針

發布時間:2021-01-04 14:33:27 來源:億速云 閱讀:175 作者:Leah 欄目:開發技術

本篇文章為大家展示了如何在Java8中使用Optional干掉空指針,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Optional概述

Optional 是個容器:它可以保存類型T的value,或者僅僅保存null。Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測,很好地解決了空指針異常處理的問題,比如可以使用isPresent()方法判斷value是否為null,使用get()方法獲取value值等等。

Optional的構造方法是私有的,實例不能new,可以使用靜態方法來創建:

// 1、創建一個包裝對象值為空的Optional對象
Optional<String> optStr = Optional.empty();
// 2、創建包裝對象值非空的Optional對象
Optional<String> optStr1 = Optional.of("optional");
// 3、創建包裝對象值允許為空的Optional對象
Optional<String> optStr2 = Optional.ofNullable(null);

Optional簡單案例

看完Optional的概述,我們用一個簡單的例子說明一下:

下面這段代碼接收一個User對象,如果user為null,則拋出異常【這是一個非常常規的避免空指針異常的做法,如果沒有這步,getName會NPE】,否則返回user的name。

 public String getName1(User user) {
 if (user == null) {
 throw new RuntimeException("user不能為null!");
 }
 return user.getName();
 }

如果使用Optional,應該怎么去處理呢?

 public String getName2(User user) {
 return Optional.ofNullable(user) // 包裝user對象,如果user為null,則返回空的Optional對象
 .map(User::getName)
 .orElseThrow(() -> new RuntimeException("user不能為null"));// 如果有值則返回,沒有則拋出異常。
 }

Optional使用靜態的ofNullable方法將user對象進行包裝,將可能為null的user對象保護起來。

 public static <T> Optional<T> ofNullable(T value) {
 // empty() 方法 創建一個空的Optional對象, of對象在構造Optional的時候,value如果weinull,會引發NPE
 return value == null ? empty() : of(value);
 }

orElseThrow方法接收一個Supplier 對象,這里我們在lambda表達式那節已經說過了,不再贅述,感興趣可以查看:Java8的Lambda表達式,你會不?

 public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
 // 如果有值,直接返回值
 if (value != null) {
 return value;
 } else {
 // 拋出異常,這個異常Supplier接口定義
 throw exceptionSupplier.get();
 }
 }

Optional的主要方法


方法描述
empty返回一個空的 Optional 實例
filter如果值存在并且滿足提供的斷言, 就返回包含該值的 Optional 對象;否則返回一個空的 Optional 對象
map如果值存在,就對該值執行提供的 mapping 函數調用
flatMap如果值存在,就對該值執行提供的 mapping 函數調用,返回一個 Optional 類型的值,否則就返 回一個空的 Optional 對象
get如果該值存在,將該值用 Optional 封裝返回,否則拋出一個 NoSuchElementException 異常
ifPresent如果值存在,就執行使用該值的方法調用,否則什么也不做
isPresent如果值存在就返回 true,否則返回 false
of將指定值用 Optional 封裝之后返回,如果該值為 null,則拋出一個 NullPointerException 異常
ofNullable將指定值用 Optional 封裝之后返回,如果該值為 null,則返回一個空的 Optional 對象
orElse如果有值則將其返回,否則返回一個默認值
orElseGet如果有值則將其返回,否則返回一個由指定的 Supplier 接口生成的值
orElseThrow如果有值則將其返回,否則拋出一個由指定的 Supplier 接口生成的異常

上述內容就是如何在Java8中使用Optional干掉空指針,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌海市| 吴堡县| 峡江县| 海城市| 凤山县| 平利县| 东莞市| 巢湖市| 梅河口市| 仪征市| 阿拉善右旗| 大宁县| 潼关县| 黄山市| 吉木萨尔县| 南投县| 南丹县| 甘谷县| 阳朔县| 武川县| 丰县| 延长县| 那曲县| 高尔夫| 新河县| 确山县| 乡城县| 会东县| 普格县| 平塘县| 合江县| 康马县| 托里县| 西宁市| 宁南县| 荥阳市| 武义县| 喀什市| 昭平县| 商都县| 双流县|