最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java8的Optional如何干掉空指針(示例詳解)

 更新時間:2021年01月04日 08:55:04   作者:天喬巴夏丶  
這篇文章主要介紹了Java8的Optional如何干掉空指針,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Optional概述

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

Optional的構(gòu)造方法是私有的,實例不能new,可以使用靜態(tài)方法來創(chuàng)建:

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

Optional簡單案例

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

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

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

如果使用Optional,應(yīng)該怎么去處理呢?

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

Optional使用靜態(tài)的ofNullable方法將user對象進(jìn)行包裝,將可能為null的user對象保護(hù)起來。

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

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

 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 如果值存在,就對該值執(zhí)行提供的 mapping 函數(shù)調(diào)用
flatMap 如果值存在,就對該值執(zhí)行提供的 mapping 函數(shù)調(diào)用,返回一個 Optional 類型的值,否則就返 回一個空的 Optional 對象
get 如果該值存在,將該值用 Optional 封裝返回,否則拋出一個 NoSuchElementException 異常
ifPresent 如果值存在,就執(zhí)行使用該值的方法調(diào)用,否則什么也不做
isPresent 如果值存在就返回 true,否則返回 false
of 將指定值用 Optional 封裝之后返回,如果該值為 null,則拋出一個 NullPointerException 異常
ofNullable 將指定值用 Optional 封裝之后返回,如果該值為 null,則返回一個空的 Optional 對象
orElse 如果有值則將其返回,否則返回一個默認(rèn)值
orElseGet 如果有值則將其返回,否則返回一個由指定的 Supplier 接口生成的值
orElseThrow 如果有值則將其返回,否則拋出一個由指定的 Supplier 接口生成的異常

參考閱讀

Java 8 Optional 類

【java8新特性 簡述】Optional

https://github.com/biezhi/learn-java8/blob/master/java8-optional/README.md

到此這篇關(guān)于Java8的Optional如何干掉空指針的文章就介紹到這了,更多相關(guān)Java8的Optional空指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 單點登錄的概念及SpringBoot實現(xiàn)單點登錄的操作方法

    單點登錄的概念及SpringBoot實現(xiàn)單點登錄的操作方法

    在本文中,我們將使用Spring Boot構(gòu)建一個基本的單點登錄系統(tǒng),我們將介紹如何使用Spring Security和JSON Web Tokens(JWTs)來實現(xiàn)單點登錄功能,本文假設(shè)您已經(jīng)熟悉Spring Boot和Spring Security,感興趣的朋友一起看看吧
    2024-10-10
  • java中dart類詳細(xì)講解

    java中dart類詳細(xì)講解

    這篇文章主要介紹了dart類詳細(xì)講解,實例講解的很清晰,有對于這方面不太清楚的同學(xué)可以跟著學(xué)習(xí)下
    2021-02-02
  • Java java.sql.Timestamp時間戳案例詳解

    Java java.sql.Timestamp時間戳案例詳解

    這篇文章主要介紹了Java java.sql.Timestamp時間戳案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 使用java8 API遍歷過濾文件目錄及子目錄和隱藏文件示例詳解

    使用java8 API遍歷過濾文件目錄及子目錄和隱藏文件示例詳解

    這篇文章主要介紹了使用java8API遍歷過濾文件目錄及子目錄及隱藏文件示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java 關(guān)鍵字super詳解及用法

    java 關(guān)鍵字super詳解及用法

    這篇文章主要介紹了java 關(guān)鍵字super詳解及用法的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳解高性能緩存Caffeine原理及實戰(zhàn)

    詳解高性能緩存Caffeine原理及實戰(zhàn)

    Caffeine是基于Java 8開發(fā)的,提供了近乎最佳命中率的高性能本地緩存組件,Spring5開始不再支持Guava Cache,改為使用Caffeine。Caffeine提供的內(nèi)存緩存使用參考Google guava的API
    2021-06-06
  • springboot后端如何實現(xiàn)攜帶token登陸

    springboot后端如何實現(xiàn)攜帶token登陸

    這篇文章主要介紹了springboot后端如何實現(xiàn)攜帶token登陸,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring Security OAuth2實現(xiàn)使用JWT的示例代碼

    Spring Security OAuth2實現(xiàn)使用JWT的示例代碼

    這篇文章主要介紹了Spring Security OAuth2實現(xiàn)使用JWT的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java CharacterEncodingFilter案例詳解

    Java CharacterEncodingFilter案例詳解

    這篇文章主要介紹了Java CharacterEncodingFilter案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java管道流實現(xiàn)線程間通信過程解析

    Java管道流實現(xiàn)線程間通信過程解析

    這篇文章主要介紹了Java管道流實現(xiàn)線程間通信過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論

郴州市| 达州市| 沅江市| 迁西县| 遵义县| 颍上县| 宝兴县| 盘锦市| 罗定市| 芮城县| 东兴市| 丁青县| 双牌县| 上饶市| 蒲城县| 深泽县| 黑山县| 桂林市| 德昌县| 民和| 仲巴县| 凉城县| 江陵县| 长阳| 新营市| 桦川县| 陵川县| 翼城县| 武山县| 牙克石市| 钦州市| 郸城县| 修水县| 阜城县| 南江县| 潞城市| 竹山县| 闵行区| 措勤县| 安西县| 通州区|