成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java8-7-Optional類詳解

wemallshop / 1129人閱讀

摘要:上一篇我們詳細(xì)介紹了函數(shù)式接口中主要的一些方法使用,本篇介紹的雖然并不是一個函數(shù)式接口,但是也是一個極其重要的類。并不是我們之前介紹的一系列函數(shù)式接口,它是一個,主要作用就是解決中的。

上一篇我們詳細(xì)介紹了Predicate函數(shù)式接口中主要的一些方法使用,本篇介紹的Optional雖然并不是一個函數(shù)式接口,但是也是一個極其重要的類。

Optional并不是我們之前介紹的一系列函數(shù)式接口,它是一個class,主要作用就是解決Java中的NPE(NullPointerException)。空指針異常在程序運(yùn)行中出現(xiàn)的頻率非常大,我們經(jīng)常遇到需要在邏輯處理前判斷一個對象是否為null的情況。

if(null != person){
    Address address = person.getAddress();
    if(null != address){
        ......
    }
}

實際開發(fā)中我們經(jīng)常會按上面的方式進(jìn)行非空判斷,接下來看下使用Optional類如何避免空指針問題

String str = "hello";
Optional optional = Optional.ofNullable(str);
optional.ifPresent(s -> System.out.println(s));//value為hello,正常輸出

首先,ofNullable方法接收一個可能為null的參數(shù),將參數(shù)的值賦給Optional類中的成員變量value,ifPresent方法接收一個Consumer類型函數(shù)式接口實例,再將成員變量value交給Consumer的accept方法處理前,會校驗成員變量value是否為null,如果value是null,則什么也不會執(zhí)行,避免了空指針問題。下方是ifPresent源碼

/**
 * If a value is present, invoke the specified consumer with the value,
 * otherwise do nothing.
 *
 * @param consumer block to be executed if a value is present
 * @throws NullPointerException if value is present and {@code consumer} is
 * null
 */
public void ifPresent(Consumer consumer) {
    if (value != null)
        consumer.accept(value);
}

如果傳入的內(nèi)容是空,則什么也不會執(zhí)行,也不會有空指針異常

String str = null;
Optional optional = Optional.ofNullable(str);
optional.ifPresent(s -> System.out.println(s));//不會輸出任何內(nèi)容

如果為空時想返回一個默認(rèn)值

String str = null;
Optional optional = Optional.ofNullable(str);
System.out.println(optional.orElseGet(() -> "welcome"));

orElseGet方法接收一個Supplier,還記得前面介紹的Supplier么,不接受參數(shù)通過get方法直接返回結(jié)果,類似工廠模式,上面代碼就是針對傳入的str變量,如果不為null那正常輸出,如果為null,那返回一個默認(rèn)值"welcome"

orElseGet方法源碼

/**
 * Return the value if present, otherwise invoke {@code other} and return
 * the result of that invocation.
 *
 * @param other a {@code Supplier} whose result is returned if no value
 * is present
 * @return the value if present otherwise the result of {@code other.get()}
 * @throws NullPointerException if value is not present and {@code other} is
 * null
 */
public T orElseGet(Supplier other) {
    return value != null ? value : other.get();
}

下一篇

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70703.html

相關(guān)文章

  • 后臺開發(fā)常問面試題集錦(問題搬運(yùn)工,附鏈接)

    摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識點總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時間和時間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對象鎖和類鎖的區(qū)別,,優(yōu)缺點及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...

    spacewander 評論0 收藏0
  • 后臺開發(fā)常問面試題集錦(問題搬運(yùn)工,附鏈接)

    摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識點總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時間和時間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對象鎖和類鎖的區(qū)別,,優(yōu)缺點及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...

    xfee 評論0 收藏0
  • 后臺開發(fā)常問面試題集錦(問題搬運(yùn)工,附鏈接)

    摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識點總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時間和時間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對象鎖和類鎖的區(qū)別,,優(yōu)缺點及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...

    makeFoxPlay 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<