内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何在Java8中使用Optional干掉空指針-創(chuàng)新互聯(lián)

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

同江ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

Optional概述

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

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

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

Optional簡(jiǎn)單案例

看完Optional的概述,我們用一個(gè)簡(jiǎn)單的例子說(shuō)明一下:

下面這段代碼接收一個(gè)User對(duì)象,如果user為null,則拋出異常【這是一個(gè)非常常規(guī)的避免空指針異常的做法,如果沒(méi)有這步,getName會(huì)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對(duì)象,如果user為null,則返回空的Optional對(duì)象
 .map(User::getName)
 .orElseThrow(() -> new RuntimeException("user不能為null"));// 如果有值則返回,沒(méi)有則拋出異常。
 }

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

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

orElseThrow方法接收一個(gè)Supplier 對(duì)象,這里我們?cè)趌ambda表達(dá)式那節(jié)已經(jīng)說(shuō)過(guò)了,不再贅述,感興趣可以查看:Java8的Lambda表達(dá)式,你會(huì)不?

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

Optional的主要方法


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

上述內(nèi)容就是如何在Java8中使用Optional干掉空指針,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:如何在Java8中使用Optional干掉空指針-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://www.rwnh.cn/article46/doheeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站維護(hù)電子商務(wù)、全網(wǎng)營(yíng)銷推廣、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
张家口市| 蒲江县| 石河子市| 罗平县| 永城市| 台江县| 漳州市| 巴中市| 崇左市| 阿拉善左旗| 松潘县| 琼中| 新营市| 库车县| 天峨县| 马尔康县| 滦平县| 岚皋县| 隆化县| 台中市| 柘荣县| 榆中县| 岳普湖县| 阳谷县| 策勒县| 界首市| 如皋市| 延长县| 蕲春县| 邯郸县| 贵溪市| 和田县| 贵港市| 博乐市| 汾西县| 无极县| 墨竹工卡县| 湘潭县| 宁乡县| 博湖县| 铜陵市|