精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

告別空指針,Optional的最佳使用姿勢!

開發 項目管理
在實際使用的時候,還得結合具體的場景進行合理選擇,有時候并不是全部采用Optional?來解決NPE?異常代碼才更加優雅,比如當前對象比較簡單,就是一個簡單判斷,通過obj != null足以解決問題。

一、背景介紹

NullPointerException,中文名:空指針異常,也簡稱 NPE,是軟件系統中最常見的錯誤異常之一。

很久以前 Google Guava 項目引入了Optional作為解決空指針異常的一種方式,不贊成寫過多的代碼來顯式檢查null,以期望程序員寫出整潔同時可讀性更高的代碼。

受 Google Guava 的影響,Optional 現在也成為了Java 8 及以上庫代碼的一部分。

在介紹Optional技術之前,我們不禁會發出一個疑問:為什么谷歌不贊成寫過多的代碼來顯式檢查null?

下面是某個常見的參數判空代碼,樣例如下。

// 判斷行政區是否為空
if(country != null){
    // 判斷行政區的上一級,行政城市是否為空
    if(country.getCity() != null){
        // 判斷行政城市的上一級,行政省是否為空
        if(country.getCity().getProvince() != null){
            // 獲取對應的行政省相關的數據
            return country.getCity().getProvince().getName();
        }
    }
}

這還是最普通的三層判斷,假如有很大一段業務邏輯處理的時候,你會發現代碼不光看起來很臃腫,并且難以閱讀,可讀性很差!

如果調整為使用Optional來編寫的話,可以轉換成如下寫法:

// 獲取當前行政區最頂級的省信息名稱
String result  = Optional.ofNullable(country)
                .map(Country::getCity)
                .map(City::getProvince)
                .map(Province::getName)
                .orElse("error");

采用Optional來編程之后,整個代碼的可讀性和整潔度,是不是要干凈很多!

這也是為什么推薦大家使用Optional的原因啦!

當然廢話也不多說,代碼直接擼起來!

二、案例實踐

在 JDK8 中,Optional 共有 12 個核心方法,下面我們一起來看看他們的用法!

2.1、empty()

empty 方法返回一個不包含值的 Optional 實例,單獨使用沒什么意義,主要和其他方法搭配使用。

Optional optional = Optional.empty();
System.out.println(optional);
-- 輸出結果
Optional.empty

2.2、of()

of 方法會返回一個 Optional 實例,如果傳入的值非空,會返回包含指定值的對象;如果傳入空,會立刻拋出空指針異常。

// 非空情況下,會正常返回
Optional optional = Optional.of("hello world");
System.out.println(optional);
-- 輸出結果
Optional[hello world]
// 為空情況下,會拋空指針異常
Optional optional = Optional.of(null);
System.out.println(optional);
-- 輸出結果
Exception in thread "main" java.lang.NullPointerException
 at java.util.Objects.requireNonNull(Objects.java:203)
 at java.util.Optional.<init>(Optional.java:96)
 at java.util.Optional.of(Optional.java:108)

2.3、ofNullable()

ofNullable 方法會返回一個 Optional 實例,如果傳入的值非空,會返回包含指定值的對象;如果傳入空,會返回不包含任何值的 empty 對象,也就是最開始介紹的Optional.empty()對象。

// 非空情況下,會正常返回
Optional optional = Optional.ofNullable("hello world");
System.out.println(optional);
-- 輸出結果
Optional[hello world]
// 為空情況下,會返回 empty 對象
Optional optional = Optional.ofNullable(null);
System.out.println(optional);
-- 輸出結果
Optional.empty

2.4、isPresent()

isPresent 方法用來判斷實例是否包含值,如果包含非空值,返回 true,否則返回 false。

// 非空值,返回true
boolean rs1 =  Optional.ofNullable("hello").isPresent();
System.out.println(rs1);

// 空值,返回false
boolean rs2 =  Optional.ofNullable(null).isPresent();
System.out.println(rs2);
-- 輸出結果
true
false

2.5、get()

get 方法,如果實例包含非空值,則返回當前值;否則拋出 NoSushElementException 異常。

// 非空值,返回當前值
Object rs =  Optional.ofNullable("hello world").get();
System.out.println(rs);
-- 輸出結果
hello world
// 空值,會拋出 NoSushElementException 異常
Object rs =  Optional.ofNullable(null).get();
System.out.println(rs);
-- 輸出結果
Exception in thread "main" java.util.NoSuchElementException: No value present
 at java.util.Optional.get(Optional.java:135)

2.6、ifPresent()

ifPresent 方法作用是當實例包含非空值時,執行傳入的 Consumer,比如調用一些其他方法;如果包含的值為空,不執行任何操作。

Optional.ofNullable("hello world")
                .ifPresent( x -> {
                    System.out.println(x);
                });
-- 輸出結果
hello world

2.7、filter()

filter 方法用于過濾不符合條件的值,接收一個Predicate參數,如果符合條件,會返回當前的Optional實例,否則返回 empty 實例。

Optional.ofNullable("hello world")
                .filter(x -> x.contains("hello"))
                .ifPresent(x -> {
                    System.out.println(x);
                });
-- 輸出結果
hello world

2.8、map()

map 方法是鏈式調用避免空指針的核心方法,當實例包含值時,對值執行傳入的Function函數接口方法,并返回一個代表結果值新的Optional實例,也就是將返回的結果再次包裝成Optional對象。

Optional.ofNullable("hello+world")
                .map(t -> {
                    if(t.contains("+")){
                        return t.replace("+", " ");
                    }
                    return t;
                }).ifPresent(t -> {
                    System.out.println(t);
                });
-- 輸出結果
hello world

2.9、flatMap()

flatMap 方法與 map 方法類似,唯一不同的地方在于:需要手動將返回的值,包裝成Optional實例,并且參數值不允許為空。

Optional.ofNullable("hello+world")
                .flatMap(t -> {
                    if(t.contains("+")){
                        t =  t.replace("+", " ");
                    }
                    // 不同之處
                    return Optional.of(t);
                }).ifPresent(t -> {
                    System.out.println(t);
                });
-- 輸出結果
hello world

2.10、orElse()

orElse 方法作用是如果實例包含非空值,那么返回當前值;否則返回指定的默認值。

Object rs =  Optional.ofNullable(null).orElse("null");
System.out.println(rs);
-- 輸出結果
null

2.11、orElseGet()

orElseGet 方法作用是如果實例包含非空值,返回這個值;否則,它會執行作為參數傳入的Supplier函數式接口方法,并返回其執行結果。

Object result = Optional.ofNullable(null)
                .orElseGet(() -> {
                    return "error";
                });
System.out.println(result);
-- 輸出結果
error

2.12、orElseThrow()

orElseThrow 方法作用是如果實例包含非空值,返回這個值;否則,它會執行作為參數傳入的異常類。

Optional.ofNullable(null)
                .orElseThrow(() -> new RuntimeException("參數為空"));
-- 輸出結果
Exception in thread "main" java.lang.RuntimeException: 參數為空
 at com.x.x.x.x.OptionalTest.lambda$main$10(OptionalTest3.java:144)
 at java.util.Optional.orElseThrow(Optional.java:290)

三、小結

以上就是 JDK8 新增的Optional類的常用方法總結,其中ofNullable、map和orElse方法搭配使用的最多。

另外orElse、orElseGet、orElseThrow區別如下:

  • orElse:如果實例包含空值,返回傳入指定的值
  • orElseGet:如果實例包含空值,返回傳入的方法中返回值
  • orElseThrow:如果實例包含空值,返回指定的異常類型

在實際使用的時候,還得結合具體的場景進行合理選擇,有時候并不是全部采用Optional來解決NPE異常代碼才更加優雅,比如當前對象比較簡單,就是一個簡單判斷,通過obj != null足以解決問題。

因此在保證業務功能的正確和穩定性的基礎之上,適當的選擇相關的工具來優化代碼的整潔度和可讀性,更能發揮出錦上添花的效果!

責任編輯:武曉燕 來源: 潘志的研發筆記
相關推薦

2023-10-08 11:09:22

Optional空指針

2024-02-28 09:03:20

Optional空指針Java

2024-02-01 12:09:17

Optional容器null

2024-08-12 08:28:35

2023-08-04 08:52:52

Optional消滅空指針

2024-10-15 15:58:11

2025-02-27 09:39:56

JavaJava 8對象

2025-06-19 09:13:10

空指針編程C++17

2021-11-15 06:56:45

系統運行空指針

2023-11-14 08:15:49

OptionalJava

2017-02-23 15:37:44

OptionObject容器

2018-05-28 15:34:12

數字營銷

2022-01-19 09:00:00

Java空指針開發

2024-05-11 15:08:33

JavaScriptJava指針

2020-12-28 06:20:27

OptionalTryjava

2017-07-10 13:09:45

前端Flexbox

2025-01-17 09:11:51

2017-09-23 15:28:32

JavaOptional方法

2016-11-16 21:18:42

android日志

2021-09-15 16:20:02

Spring BootFilterJava
點贊
收藏

51CTO技術棧公眾號

а_天堂中文在线| www.久久久久久久| 亚洲一级大片| 一区二区国产视频| 99国产视频| 久久久久无码国产精品不卡| а√中文在线天堂精品| 五月天欧美精品| 日韩成人av电影在线| 一级黄色大片网站| 天天做天天爱天天综合网| 欧美一区二区视频在线观看2020 | 国产精品suv一区二区| 精品丝袜久久| 在线亚洲一区观看| 91欧美视频在线| 国产精品成人无码| 亚洲午夜精品一区 二区 三区| 欧美日韩一区三区| 青青草视频国产| 日本精品专区| 黑人精品欧美一区二区蜜桃| 久久久影视精品| 90岁老太婆乱淫| 日本午夜免费一区二区| 午夜欧美大尺度福利影院在线看 | 亚洲一区二区三区免费| 一本色道久久综合亚洲91| 亚洲午夜高清视频| 午夜一区在线观看| 韩国成人精品a∨在线观看| 欧美理论电影在线播放| 37p粉嫩大胆色噜噜噜| 亚洲综合色婷婷在线观看| 欧美视频一区在线| 国产xxxxx在线观看| 里番在线播放| 亚洲欧美视频一区| 亚洲一区二区三区在线观看视频 | 成人午夜在线播放| 亚洲www永久成人夜色| 中文在线字幕av| 噜噜噜91成人网| 8090成年在线看片午夜| 久久老司机精品视频| 久久久人成影片免费观看| 中文字幕在线看视频国产欧美在线看完整| 国产ts丝袜人妖系列视频| 午夜视频一区二区在线观看| 日韩一区二区三区免费观看| 欧美一级xxxx| 成人在线啊v| 欧美美女一区二区| 国产精品久久久久久9999| 国产精品久久久久久妇女| 日本韩国精品在线| 欧美日韩在线免费播放| 91大神在线观看线路一区| 欧洲一区二区三区免费视频| 亚洲视频在线观看一区二区三区| 亚洲wwww| 欧美日韩日日摸| 五月激情婷婷在线| 清纯唯美激情亚洲| 亚洲国产精品美女| www.自拍偷拍| 欧美日韩亚洲在线观看| 色噜噜狠狠狠综合曰曰曰| 中日韩一级黄色片| 欧美日韩p片| 久久久久在线观看| 免费观看成人毛片| 日韩精品视频网| 国产欧美韩国高清| 精品人妻无码一区二区色欲产成人 | 又骚又黄的视频| 精品一区二区三区在线播放| 亚洲a级在线观看| 免费特级黄色片| 超薄肉色丝袜一二三| 欧美呦呦网站| 美女少妇精品视频| 日韩精品视频免费播放| 久久久久久一区二区| 国产剧情日韩欧美| 午夜精品久久久久久久99老熟妇 | 天堂美国久久| 欧美—级a级欧美特级ar全黄| 国产无套在线观看| 日本一区中文字幕| 99久久免费国| 国产三级电影在线| 亚洲精品视频在线观看免费| 欧美老熟妇喷水| 日本a人精品| 精品久久国产老人久久综合| 舐め犯し波多野结衣在线观看| 91嫩草亚洲精品| 午夜精品国产精品大乳美女| 中文字幕男人天堂| www.激情成人| 亚洲一区二区在线看| 国产蜜臀在线| 欧美日韩国产片| 99re久久精品国产| 中文字幕av亚洲精品一部二部| 97热在线精品视频在线观看| 亚洲一区二区天堂| 国产精品天天狠天天看| 性生交大片免费全黄| 一区精品久久| 国产精品日韩欧美| 欧美 日韩 国产 精品| 国产精品三级久久久久三级| 欧美极品欧美精品欧美| 欧美性www| 亚洲欧美一区二区三区情侣bbw | 欧美一级片中文字幕| 日韩一区二区三区高清在线观看| 亚洲人成在线免费观看| 久久影院一区二区| 狠狠久久亚洲欧美| 日韩在线播放一区| 国产精品一区二区欧美| 久青草国产在线| 亚洲国产综合人成综合网站| 五月婷婷之婷婷| 欧美极品中文字幕| 韩国三级日本三级少妇99| 91亚洲欧美激情| 久久久五月婷婷| 成人一对一视频| 一区二区亚洲视频| 精品中文字幕在线观看| 国产乱淫av片免费| 国产精品毛片久久久久久久| 最近免费中文字幕中文高清百度| 日韩高清三区| 98精品在线视频| 日本黄色不卡视频| 亚洲国产精品天堂| 91九色蝌蚪porny| 欧美日韩国产欧| 5566av亚洲| 国产传媒在线播放| 欧美一级淫片007| 日日噜噜夜夜狠狠久久波多野| 看片网站欧美日韩| 亚洲欧美日韩在线综合| ww久久综合久中文字幕| 一区二区三区四区在线观看视频 | 欧美无砖专区一中文字| 日韩中文字幕电影| 视频精品一区二区| 日本一区高清不卡| 国产麻豆一区| 菠萝蜜影院一区二区免费| 96亚洲精品久久久蜜桃| 自拍视频在线观看一区二区| 三级黄色片播放| 欧美午夜不卡影院在线观看完整版免费| 成人免费视频在线观看超级碰| 黄色网在线免费观看| 欧美一区二区成人| 久久精品女人毛片国产| 99久久精品99国产精品| 国产午夜福利视频在线观看| 国产精品一线天粉嫩av| 国产精品久久久久免费a∨| 性开放的欧美大片| 91精品国产91久久久久久最新毛片 | 国产 日韩 欧美 综合 一区| 欧美日韩xxxxx| 韩国中文字幕hd久久精品| 精品久久久久久久中文字幕| av永久免费观看| 国精品**一区二区三区在线蜜桃| 真实国产乱子伦对白视频| 欧美影院天天5g天天爽| 国产精品视频区1| 在线观看av免费| 亚洲精品动漫100p| 伊人影院中文字幕| 亚洲黄色免费电影| 亚洲av成人片色在线观看高潮| 老司机精品导航| 成年人黄色在线观看| 风间由美性色一区二区三区四区| 欧美亚洲在线播放| 快射视频在线观看| 国产视频精品一区二区三区| 国产精品玖玖玖| 香蕉成人伊视频在线观看| 99久久久无码国产精品衣服| 国产精品一区二区三区四区| 日韩中文字幕二区| 欧美日韩影院| 视频在线99| 1204国产成人精品视频| 国产成人精品久久| 免费毛片在线看片免费丝瓜视频 | 91免费国产网站| 麻豆免费版在线观看| 日韩小视频在线| 性感美女福利视频| 欧美一区二区三区不卡| 天天干天天操天天爱| 亚洲午夜久久久久久久久久久| 性欧美一区二区| 99麻豆久久久国产精品免费| 想看黄色一级片| 午夜在线视频一区二区区别| 久久av喷吹av高潮av| 欧美人与物videos另类xxxxx| 国产精品成人观看视频免费| 国产精品成人国产| 26uuu日韩精品一区二区| 天堂av中文在线| 在线观看欧美视频| 香蕉av一区二区三区| 欧美一二三区在线| 一级黄色片在线播放| 日韩欧美国产视频| 日本三级小视频| 一区二区国产视频| 国产探花在线免费观看| 五月婷婷深深爱| 在线电影欧美成精品| 69av视频在线观看| 日韩欧美在线观看| 日韩成年人视频| 亚洲曰韩产成在线| 清纯粉嫩极品夜夜嗨av| 亚洲欧美自拍偷拍| 91麻豆制片厂| 国产欧美日韩另类一区| 一级黄色片大全| 2020国产精品自拍| 黑人巨大精品欧美| 91一区在线观看| 国产麻豆xxxvideo实拍| 成人性生交大片免费看视频在线| 日韩大尺度视频| 久久久久久婷| 91色精品视频在线| 国产成人精选| 国产精品精品久久久| 刘亦菲一区二区三区免费看| 国产91在线观看丝袜| 日本日本精品二区免费| 2020最新国产精品| 91亚洲精品一区二区| 日韩在线观看| 97超碰蝌蚪网人人做人人爽 | 国产一区999| 中文av字幕在线观看| 久久综合给合久久狠狠狠97色69| 青青青青在线视频| 中文字幕一区二区三区久久网站| 隔壁老王国产在线精品| 91好色先生tv| 欧美性欧美巨大黑白大战| 日本高清不卡码| 一本一道久久a久久精品综合蜜臀| 国产精品久久久久久久久久久久久久久久久 | 95av在线视频| 欧美一级做a| 91精品久久久久久久久青青| 日本免费一区二区三区等视频| 99久久久久久| 国产a级黄色片| av电影在线观看完整版一区二区| 少妇一级淫片免费放播放| 99re这里只有精品6| 欧美成人国产精品一区二区| 国产精品欧美久久久久一区二区| 欧美三级黄色大片| 亚洲五月六月丁香激情| 天堂在线免费观看视频| 欧美色精品在线视频| 国产黄a三级三级三级| 日本电影亚洲天堂| 国产粉嫩在线观看| 欧美影院久久久| 99热播精品免费| 91欧美精品成人综合在线观看| 成人搞黄视频| 日韩电影免费观看高清完整| 亚洲人体av| 日本中文字幕网址| 奇米影视在线99精品| 伊人五月天婷婷| 91麻豆蜜桃一区二区三区| 欧美xxxx精品| 午夜精品视频在线观看| 一级黄色片免费| 精品一区精品二区| 国产高清一区二区三区视频| 欧美最顶级的aⅴ艳星| 亚洲成a人片777777久久| 精品伦理一区二区三区| 91精品国产乱码久久久久久久| av网站在线观看不卡| 国产精品自拍在线| 人与嘼交av免费| 亚洲福利视频一区| 一级黄色片在线| 亚洲视频axxx| 超碰在线中文字幕| 成人av.网址在线网站| 久久不见久久见免费视频7| 中国女人做爰视频| 青青草一区二区三区| 国产真实乱人偷精品| 亚洲人成精品久久久久久| 免费av中文字幕| 日韩av在线最新| 日韩成人伦理| 国产主播精品在线| 蜜桃一区二区| 国产h视频在线播放| 国产成人在线看| 日本免费网站视频| 秋霞av亚洲一区二区三| 欧美黑人性视频| 成人在线网站| 久久久国产精品一区二区三区| 中文在线日韩| 午夜啪啪小视频| 国产精品天干天干在观线| 精品国产一区二区三区四| 精品第一国产综合精品aⅴ| 18av在线视频| 91视频国产精品| 99精品网站| 污污的视频免费| 国产精品久久看| 亚洲图片欧美在线| 色偷偷噜噜噜亚洲男人的天堂| 日韩在线影院| 日本精品一区二区| 日韩福利视频网| 一级黄色片网址| 欧美视频在线观看一区二区| 国产人成在线视频| 国产精品女视频| 91日韩在线| 亚洲欧美日本一区二区三区| 国产精品激情偷乱一区二区∴| 中文字幕av免费观看| 日韩中文字幕国产精品| 黑人一区二区三区| 91免费视频黄| 国产精品99久久久久久有的能看| 男女性高潮免费网站| 91精品婷婷国产综合久久性色| 2024最新电影在线免费观看| 91黄色国产视频| 亚洲国产一区二区三区a毛片| 手机在线看片日韩| 一本大道久久精品懂色aⅴ| 欧美精品久久久久久久久久丰满| 国产成人综合亚洲| 图片小说视频色综合| 北条麻妃亚洲一区| 亚洲电影一区二区| 日韩国产福利| 国产精品美女免费视频| 91精品亚洲| 免费看黄色片的网站| 色综合天天做天天爱| 欧美一区二区三区在线观看免费| 亚洲综合大片69999| 日韩视频在线一区二区三区| 精品无码国产污污污免费网站 | 免费一区二区三区在线观看| 成人一区二区视频| 亚洲av中文无码乱人伦在线视色| 在线观看久久av| 色悠久久久久综合先锋影音下载| 国产精品12345| 国产视频视频一区| 精品乱子伦一区二区| 91地址最新发布| 欧美电影免费| 亚洲麻豆一区二区三区| 欧美在线视频日韩| 在线免费观看a视频| 久久精品日产第一区二区三区| 免费观看欧美大片| 亚洲欧美国产精品专区久久| 欧美日韩国产网站| 成年人视频大全| 久久―日本道色综合久久| 国产精品呻吟久久| 欧美孕妇孕交黑巨大网站| 天天影视天天精品| 波多野结衣av在线观看| 日韩一二三四区| 日本成人福利|