日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了空檢查與可選的isPresent檢查的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

誰能解釋一下Optional如何幫助我們避免NullPointerException

Optional<String> op = someFunc()
if(op.isPresent()) {
   op.get();
}
String possibleNull = op.get();

此代碼不是也易于NullPointerException嗎?如果是,那么為什么首選此代碼而不是

String op = someFunc()
if(op != null) {
   op.get();
}
String possibleNull = op;

Optional除了幫助我們了解函數(shù)是否實(shí)際具有返回值這一事實(shí)之外,它還有什么可能的好處

推薦答案

假設(shè)您要獲取函數(shù)返回的字符串,將其轉(zhuǎn)換為大寫,然后打印出來。如果您有:

String someFunc() { ... }

您可能會想寫:

System.out.println(someFunc().toUpperCase());

當(dāng)然,如果someFunc返回null,則拋出NullPointerException。相反,假設(shè)我們有這樣的情況:

Optional<String> someFunc() { ... }

然后

System.out.println(someFunc().toUpperCase());

不起作用,因?yàn)?code>Optional沒有toUpperCase方法。此時–希望如此–您將面臨Optional,這應(yīng)該會讓您考慮Optional為空的情況。這有助于避免NPE,但可能只是在一定程度上。

現(xiàn)在您可能專注于如何從Optional中獲取值,而您可能忘記了空案例。啊,有一個get方法:

System.out.println(someFunc().get().toUpperCase());

這將帶回與NPE相同的問題,只是例外是NoSuchElementException。因此,如果您在Optional上盲目調(diào)用get,這實(shí)際上與在引用上調(diào)用方法而不檢查它是否為空幾乎是一樣的。

(出于這個原因,Brian Goetz認(rèn)為Optional.get是Java 8中最大的錯誤。參見他在16分鐘內(nèi)對Angelika LangerJAX 2015 Fragen und Antworten zu Java 8的采訪。我不確定這是最大的,但這是一個錯誤。人們只是不希望get引發(fā)異常。)

如果您經(jīng)常檢查空引用或空選項(xiàng),則

Optional<String> os = someFunc();
if (os.isPresent()) {
    System.out.println(os.get().toUpperCase());
}

比舊的好不了多少

String s = someFunc();
if (s != null) {
    System.out.println(s.toUpperCase());
}

真正的優(yōu)勢在于它是一個庫類,具有相當(dāng)豐富的API,用于以安全的方式處理空案例。通常可以通過將兩個方法調(diào)用鏈接到最初返回Optional的方法來處理可能包含在Optional中的值。例如,我們可以按如下方式重寫上面的示例:

someFunc().map(String::toUpperCase)
          .ifPresent(System.out::println);

這篇關(guān)于空檢查與可選的isPresent檢查的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標(biāo)簽:isPresent 可選 檢查
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定