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

Java空指針檢查實(shí)在看不下去了——轉(zhuǎn)用Optional真香

開發(fā) 后端
我們可以把Optional類看成是一個(gè)容器,我們將對(duì)象存儲(chǔ)到容器中后,通過調(diào)用內(nèi)置的API,可以較為安全地過濾掉可能存在的空指針問題,避免繁瑣嵌套的If、Else操作,讓我們的代碼盡可能的簡(jiǎn)潔。

前言

在Java開發(fā)中,空指針是程序員遇到的最多的異常之一(特別是剛接觸java開發(fā)的),對(duì)于對(duì)象中的某個(gè)屬性,有時(shí)候我們?yōu)榱吮苊獬绦驁?bào)空指針錯(cuò)誤,而不得不使用較多的if、else來進(jìn)行邏輯判斷,但這樣的話代碼可能就會(huì)比較冗余或者說不夠優(yōu)雅。雖然我們大部分程序員是有責(zé)任心的,不會(huì)坐視不管,于是就有了大量的 null 值檢查。盡管有時(shí)候這種檢查完全沒有必要,但我們已經(jīng)習(xí)慣了例行公事。終于Java 8 看不下去了,就引入了 Optional,以便我們編寫的代碼不再那么呆板。

NPE問題

NPE問題就是我們?cè)陂_發(fā)中經(jīng)常碰到的NullPointerException.假設(shè)我們有兩個(gè)類,他們的UML類圖如下圖所示:

現(xiàn)在需要訪問用戶地址信息的省份,簡(jiǎn)單代碼為:user.getAddress().getProvince();

在這種寫法中,當(dāng)user為null時(shí),是有可能報(bào)NPE異常的。為了解決這個(gè)問題,于是采用下面的寫法:

public String OptGetProvince(User user){
      if(user!=null){
          Address address = user.getAddress();
          if(address!=null){
              String province = address.getProvince();
              return province;
          }
          return "none";
      }
}

這種寫法是比較繁瑣的,為了避免上述丑陋的寫法。于是JAVA8提供了Optional類來優(yōu)化這種寫法:

public String OptGetProvince(User user){
        return Optional.ofNullable(user)
                .map(s -> s.getAddress())
                .map(a -> a.getProvince())
                .orElse("none");
    }

可以看到,通過Optional的使用,可以很好的解決if以及嵌套判空的問題,使得整體的判斷變得清爽簡(jiǎn)潔多了。

Optional使用

我們可以把Optional類看成是一個(gè)容器,我們將對(duì)象存儲(chǔ)到容器中后,通過調(diào)用內(nèi)置的API,可以較為安全地過濾掉可能存在的空指針問題,避免繁瑣嵌套的if、else操作,讓我們的代碼盡可能的簡(jiǎn)潔。API主要分5個(gè)大類。

構(gòu)造函數(shù): empty,of,ofNullable

empty返回一個(gè)空的Optional對(duì)象。

Optional.empty();

of根據(jù)傳入的值生成Optional對(duì)象。

// 方式2 將非空對(duì)象作為屬性傳入Optional類中
User u = new User("小明",16);
 Optional.of(u.getAddress());

ofNullable 和of方法一樣,根據(jù)傳入的值生成optional對(duì)象。

// 方式3 將非空對(duì)象作為屬性傳入Optional類中
 User u = new User("小明",16);
 Optional.ofNullable(u.getAddress());

of和ofNullable的作用很相近,從Optional類的源代碼看的話,可以發(fā)現(xiàn)對(duì)于ofNullable方法的話是有進(jìn)行判空的。也就是說,如果使用of方法傳入的參數(shù)是null,同樣會(huì)報(bào)空指針。

值選擇方法:orElse,orElseGet和orElseThrow

這三個(gè)方法相當(dāng)于SQL中的IFNULL函數(shù),若Optional中值為null,則返回給定的默認(rèn)值。

orElse

User s = new User("小明",16,new Address());
String result = Optional.ofNullable(s.getAddress().getProvince()).orElse("深圳");

orElseGet

User s = new User("小明",16,new Address());
String result = Optional.ofNullable(s.getAddress().getProvince()).orElseGet(()->"深圳");

orElseThrow

User s = new User("小明",16,new Address());
String s3 = Optional.ofNullable(s.getAddress().getProvince()).orElseThrow(() -> new IllegalArgumentException("缺少參數(shù)"));

對(duì)于orElseThrow和orElseGet兩個(gè)方法,是采用函數(shù)式接口的方式來作為參數(shù)的。同時(shí),對(duì)于orElse和orElseGet兩個(gè)方法,作用相近,區(qū)別是若Optional對(duì)象中的值不為空,則orElseGet不會(huì)創(chuàng)建參數(shù)中的對(duì)象,而orElse無論什么情況都會(huì)創(chuàng)建參數(shù)對(duì)象。

判空函數(shù):isPresent和ifPresent

兩個(gè)函數(shù)的用法類似,都可以用作判空,區(qū)別在于當(dāng)不為空時(shí),ifPresent會(huì)執(zhí)行對(duì)應(yīng)的函數(shù)。

isPresent

User user = new User("小明",16,new Address());
boolean b1 = Optional.ofNullable(user.getAddress()).isPresent();
System.out.println(b1);  // true

ifPresent

User user = new User("小明",16,new Address());
Optional.ofNullable(user.getAddress()).ifPresent(address -> System.out.println(address));

值轉(zhuǎn)換函數(shù):map和flagMap

值轉(zhuǎn)換的就是對(duì)Optional對(duì)象中的value值進(jìn)行轉(zhuǎn)換,對(duì)值應(yīng)用(調(diào)用)作為參數(shù)的函數(shù),然后將返回的值包裝在 Optional中

map

User user = new User("小明",16,new Address());
String s1 = Optional.ofNullable(user).map(s -> s.getName()).get();

flagMap

User user = new User("小明",16,new Address());
String s1 = Optional.ofNullable(user).flatMap(s -> s.getName()).get();

兩個(gè)函數(shù)都可以實(shí)現(xiàn)值的轉(zhuǎn)換,兩者的區(qū)別是二者的入?yún)⒉煌R陨厦娴膄lagMap的示例代碼為例,我們需要在User類中重寫一下getName方法,使其返回Optional對(duì)象。

過濾(篩選)函數(shù):filter

該函數(shù)的作用是,判斷Optional中的值是否滿足指定條件,若滿足則返回,否則返回一個(gè)EMPTY對(duì)象。

User user = new User("小明",16,new Address());
User result = Optional.ofNullable(user).filter(s -> s.getName().equals("小紅")).orElseGet(() ->new User("小藍(lán)",10));
System.out.println(result); // user{address=null, name='小藍(lán)', age=10}

這里會(huì)篩選出滿足姓名為小紅的User對(duì)象,若不滿足則新建一個(gè)姓名為小藍(lán)的User對(duì)象。

最后

需要注意,使用Optonal這種鏈?zhǔn)骄幊屉m然簡(jiǎn)潔化了程序代碼,但是邏輯性不是很明顯,相對(duì)來說會(huì)損失一定的代碼可讀性,具體的使用需要開發(fā)人員在實(shí)際場(chǎng)景中進(jìn)行權(quán)衡。個(gè)人建議哪怕是自己不經(jīng)常使用也要盡量掌握,避免出現(xiàn)閱讀源碼的時(shí)候顯得尷尬。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2018-07-21 14:32:58

無限流量套餐網(wǎng)絡(luò)

2015-05-08 07:36:36

Google App 云割據(jù)

2021-07-31 07:09:22

谷歌安卓App

2025-02-03 00:00:10

2021-12-21 08:12:01

Web JavaScriptCSS

2014-09-28 10:09:28

2024-01-26 15:28:29

大模型MambaLeCun

2013-05-20 16:30:37

移動(dòng)應(yīng)用App推廣

2014-07-21 15:39:47

2013-11-08 17:33:52

2023-02-12 19:40:17

2021-03-19 08:50:11

數(shù)據(jù)中臺(tái)業(yè)務(wù)中臺(tái)架構(gòu)

2013-09-16 17:02:04

2023-05-05 10:28:47

2020-04-09 09:44:23

周鴻祎360草根

2019-06-13 16:30:37

代碼Java編程語言

2022-12-12 07:40:36

服務(wù)器項(xiàng)目Serverless

2011-09-15 09:05:11

java

2020-02-05 09:38:34

程序員技能開發(fā)者

2020-10-13 06:52:50

數(shù)據(jù)倉庫項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美伦理在线视频| 特黄毛片在线观看| 国产精品99久久久久久有的能看 | 深夜福利视频网站| 久久久久国产一区二区| 日韩综合视频在线观看| 人妻体体内射精一区二区| av电影院在线看| 国产亚洲精品bt天堂精选| 成人精品aaaa网站| 99视频在线看| 国产精品x453.com| 国产丝袜一区二区三区| 欧美性受xxxxxx黑人xyx性爽| 欧美videosex性欧美黑吊| 久久久久免费观看| 俄罗斯精品一区二区| 亚洲天堂视频在线播放| 亚洲一级一区| 精品国产一区二区三区久久| 538国产视频| 欧美高清hd| 欧美日韩在线一区二区| 天堂…中文在线最新版在线| 美女免费久久| 久久精品欧美一区二区三区麻豆| 91精品国产综合久久久久久蜜臀 | 久久久久久久久四区三区| 一区二区三区免费在线视频| 国产精品久久久久久久免费软件| 久久久国产一区二区| 中文幕无线码中文字蜜桃| 日本久久伊人| 欧美一区二区三区性视频| 久久精品视频91| 2020av在线| 亚洲男同性恋视频| 亚洲精品欧美精品| 免费观看成年在线视频网站| 成人高清视频免费观看| 7777精品伊久久久大香线蕉语言 | 免费中文字幕视频| 四季av一区二区三区免费观看| 亚洲精品福利在线观看| 久久久久国产免费| 四虎国产精品成人免费影视| 色婷婷久久一区二区三区麻豆| 国产 日韩 欧美在线| 伊人福利在线| 亚洲免费av网站| 特级毛片在线免费观看| 中文字幕在线免费| 国产精品网站在线观看| 日韩免费中文专区| av中文字幕一区二区三区| 久久精品人人做人人综合| 日产精品高清视频免费| 青青九九免费视频在线| 91毛片在线观看| 久久久久久国产精品免费免费| 日韩有码第一页| 99久久er热在这里只有精品66| 国产精品免费视频一区二区| 亚洲欧美激情国产综合久久久| 国产高清亚洲一区| av蓝导航精品导航| 欧美一级免费片| 99精品视频在线免费观看| 精品国产电影| 麻豆导航在线观看| 国产精品网站在线播放| 最新国产精品久久| 青青青草视频在线| 黑人巨大精品欧美一区二区免费| 国产91在线免费| 国产精品久久久久av电视剧| 欧美日韩一区中文字幕| 亚洲精品在线网址| 国产精品欧美大片| 日韩av综合网站| 亚洲一区二区自偷自拍| 91九色精品国产一区二区| 久久资源免费视频| 国产黄色片免费看| 久久精品久久综合| 国产精品对白一区二区三区| 日本人妖在线| 1区2区3区国产精品| 亚洲色成人www永久在线观看| 国产精品蜜芽在线观看| 一本久久a久久精品亚洲| 在线黄色免费看| eeuss国产一区二区三区四区| 亚洲国产女人aaa毛片在线| 国产sm调教视频| 欧美99在线视频观看| 78m国产成人精品视频| 中文字幕人妻丝袜乱一区三区| 国产精品中文字幕一区二区三区| 韩国成人av| 中文字幕在线观看日本| 亚洲成人av中文| 孩娇小videos精品| 国产一区二区三区亚洲| 中文字幕在线亚洲| 日韩熟女精品一区二区三区| 日本 国产 欧美色综合| 国产精品国模大尺度私拍| 国产黄在线观看免费观看不卡| 亚洲精品国产品国语在线app| 国产原创popny丨九色 | 99在线观看| 男女视频在线观看免费| 亚洲精品国产a| 不卡av免费在线| 久久精品论坛| 久久中文字幕在线视频| 亚洲综合图片网| 成人精品在线视频观看| 中文字幕日韩精品久久| 不卡一二三区| 亚洲第一免费播放区| 欧美h片在线观看| 免费看的黄色欧美网站| 国产精品区二区三区日本| 午夜视频在线观看网站| 色婷婷综合久久久久中文一区二区 | 日韩三级电影| 三级中文字幕在线观看| 日韩视频免费观看高清完整版 | 亚洲自拍偷拍麻豆| 亚洲天堂伊人网| 日韩精品2区| 国产精品18久久久久久首页狼| 亚洲女同志亚洲女同女播放| 亚洲日本在线a| 亚欧激情乱码久久久久久久久| 亚洲国产精品嫩草影院久久av| 欧美极品欧美精品欧美视频 | 欧美亚洲综合视频| 亚洲丝袜av一区| 日本免费在线观看视频| 91亚洲精华国产精华精华液| 欧美日韩视频免费| 欧美经典一区| 欧美大片欧美激情性色a∨久久| 97超碰中文字幕| 一区二区中文字幕在线| 91精品无人成人www| 精品日韩一区| 国产精品久久久久秋霞鲁丝| caoporn国产精品免费视频| 欧美亚洲动漫制服丝袜| a级黄色免费视频| 另类综合日韩欧美亚洲| 亚洲国产欧洲综合997久久 | 91三级在线| 日韩色视频在线观看| 欧美精品xxxxx| 成人性色生活片免费看爆迷你毛片| 久久久天堂国产精品| 一区二区三区亚洲变态调教大结局 | 欧美日韩中文另类| 蜜桃视频最新网址| 国产精品综合视频| 久久久久免费看黄a片app| 美国一区二区| 国产成人avxxxxx在线看| 激情小说 在线视频| 欧美午夜寂寞影院| 成人在线观看高清| 成人一区在线观看| 欧美在线观看成人| 欧美美女视频| aaa级精品久久久国产片| 丁香花在线影院| 亚洲乱码一区av黑人高潮| 在线免费观看日韩视频| 亚洲欧美日韩国产中文在线| 久久久无码人妻精品无码| 亚洲少妇在线| 亚洲成人在线视频网站| 日韩一区网站| 日av在线播放中文不卡| 国产美女福利在线| 日韩av在线网页| 一级做a爱片性色毛片| 亚洲无人区一区| 波多野在线播放| 国产成人久久精品77777最新版本| 亚洲美免无码中文字幕在线| 日韩精品dvd| 国新精品乱码一区二区三区18| 经典三级一区二区| 欧美另类高清videos| 免费a在线观看| 91精品国产综合久久久蜜臀粉嫩| 精品无码久久久久久久| 中文字幕欧美国产| 亚洲av成人精品一区二区三区 | 精品人妻一区二区三区免费| 国产欧美91| www.-级毛片线天内射视视| 欧美一区 二区| 成人在线视频网| 亚洲优女在线| 欧美极品少妇xxxxⅹ喷水| av大全在线免费看| 亚洲精品久久久一区二区三区 | 久久99精品国产.久久久久久 | 日本在线视频不卡| 高清精品视频| 91免费看国产| 国产成人精品亚洲日本在线观看| 欧美激情一级欧美精品| 丝袜美腿美女被狂躁在线观看| 亚洲国产成人一区| 国产特黄一级片| 精品视频在线免费看| 亚洲午夜18毛片在线看| 亚洲精品免费在线| 欧美肥妇bbwbbw| 国产欧美精品一区二区色综合| 亚洲成年人在线观看| 极品少妇xxxx偷拍精品少妇| 欧美丰满熟妇xxxxx| 夜夜嗨av一区二区三区网站四季av| 在线综合视频网站| 欧美精品一区二区久久| 欧美精品成人一区二区在线观看| www.豆豆成人网.com| 亚洲伊人第一页| 国产美女视频一区二区 | 在线视频1卡二卡三卡| 日韩欧美a级成人黄色| 在线免费观看毛片| 一区二区成人在线| 强行糟蹋人妻hd中文| 亚洲丝袜自拍清纯另类| 性色国产成人久久久精品| 国产欧美在线观看一区| 国产肥白大熟妇bbbb视频| 91一区一区三区| 亚洲天堂视频一区| 久久综合九色综合久久久精品综合| 成年人小视频在线观看| 国产aⅴ精品一区二区三区色成熟| 被黑人猛躁10次高潮视频| 国产一区二区视频在线播放| 亚洲黄色av片| 国产精品亚洲人在线观看| 初高中福利视频网站| 国产成人一区二区精品非洲| 亚洲综合在线一区二区| 国产a精品视频| 超碰97在线资源站| 91丝袜国产在线播放| 深爱五月激情网| 国产肉丝袜一区二区| 蜜桃av免费在线观看| 亚洲欧洲美洲综合色网| 777777国产7777777| 樱花影视一区二区| 国产成人一区二区三区影院在线| 精品国产精品自拍| 久久久黄色大片| 欧美日韩一级二级| 国产黄色一级大片| 亚洲第一页自拍| 黄色小视频在线免费观看| 在线看日韩av| 亚洲丝袜一区| 秋霞av国产精品一区| 91国内外精品自在线播放| 国产主播欧美精品| 好吊妞国产欧美日韩免费观看网站 | 欧美黑白配在线| 青青草原亚洲| 婷婷久久国产对白刺激五月99| 狠狠干视频网站| 国产日韩专区| 色18美女社区| 91影院在线免费观看| 91n在线视频| 婷婷久久综合九色综合伊人色| 无码免费一区二区三区| 69av一区二区三区| 亚洲欧洲综合在线| 精品国产一区二区三区久久久狼| 国产美女福利在线观看| 日本亚洲精品在线观看| 91精品一区| 久久综合久久久| 欧美影视一区| 欧美成人黑人猛交| 国产成人精品亚洲午夜麻豆| 久久av无码精品人妻系列试探| 亚洲欧美日韩成人高清在线一区| 国产精品一区二区6| 欧美日韩高清一区二区三区| 成人久久久精品国产乱码一区二区| 亚洲欧洲一区二区三区在线观看| www久久日com| 国产精品电影在线观看| 99久久香蕉| 伊人久久大香线蕉成人综合网 | 国产69精品久久久久久| 国产欧美视频在线| 日本成人看片网址| 激情综合视频| 色91精品久久久久久久久| 久久众筹精品私拍模特| 精品无码久久久久| 欧美一区二区三区啪啪| 国产日本在线视频| 91精品国产高清久久久久久久久 | 欧美一区二区高清在线观看| 欧美国产综合| 日韩欧美理论片| 中文字幕欧美激情| 自拍偷拍校园春色| 日韩精品免费在线观看| bl在线肉h视频大尺度| 亚洲r级在线观看| 91亚洲国产| 国产野外作爱视频播放| 91麻豆福利精品推荐| 国产第一页在线播放| 日韩一区二区中文字幕| 色综合久久久久综合一本到桃花网| 8090成年在线看片午夜| 岛国av一区| 妞干网视频在线观看| 国产毛片精品视频| 黑人操日本美女| 欧美日韩国产区一| av在线免费观看网| 国产成+人+综合+亚洲欧洲| 少妇精品导航| av天堂永久资源网| 久久综合给合久久狠狠狠97色69| 日韩少妇高潮抽搐| 日韩成人av网| 涩涩视频在线播放| 欧美主播一区二区三区美女 久久精品人| 影音先锋中文字幕一区| wwwxx日本| 精品欧美一区二区三区| 色鬼7777久久| 国产va免费精品高清在线| 国产精品自拍区| 国产三级日本三级在线播放| 国产调教视频一区| 亚洲资源在线播放| 久久亚洲春色中文字幕| 久久久久毛片免费观看| 91麻豆天美传媒在线| 国产成人综合视频| 国产精品黄色网| 亚洲性视频网址| 六九午夜精品视频| 国产奶头好大揉着好爽视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 在线观看国产一区二区三区| 色天天综合狠狠色| 国产区一区二| 日本手机在线视频| 国产午夜亚洲精品不卡| 亚洲一区二区视频在线播放| 久久精品成人欧美大片| 一区二区三区四区高清视频| 国产中文字幕在线免费观看| 久久精品视频一区二区三区| 国产精品第6页| 欧美大肥婆大肥bbbbb| 欧美日韩一区二区三区不卡视频| 精品99在线视频| 中文字幕在线观看一区| 不卡的日韩av| 欧美一级视频一区二区| 日韩在线综合| 亚洲欧美高清在线| 在线一区二区视频| 亚洲区欧洲区| 欧美日韩一区二区三区在线视频| 久久国产精品99久久久久久老狼 | 国内久久视频| 国产ts在线播放| 91精品午夜视频| 在线观看网站免费入口在线观看国内| 天天综合色天天综合色hd| 国产成人亚洲综合a∨婷婷| 日韩黄色a级片| 最近2019年中文视频免费在线观看| 我要色综合中文字幕| 欧美精品无码一区二区三区| 亚洲男女一区二区三区| 全色精品综合影院| 国产精品18毛片一区二区| 日韩在线a电影|