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

資訊專欄INFORMATION COLUMN

Java 8 Optional與NullPointerException

時飛 / 2847人閱讀

摘要:異常類列舉了中部分的異常類,其中最常見的當屬了,程序員必須小心提防,所幸中引入了類這個語法糖來更好的處理這個異常。函數(shù)式接口可以被實現(xiàn)為,更進一步可以轉(zhuǎn)換為表達式,如果只是調(diào)用了一個函數(shù),還可以用。

JAVA異常類列舉了Java中部分的異常類,其中最常見的當屬NullPointerException了,程序員必須小心提防,所幸Java 8中引入了Optional類這個語法糖來更好的處理這個異常。
比如有如下三個類需要遞歸引用:

class FirstLayer {
    private SecondLayer secondLayer;
    public SecondLayer getSecondLayer(){
        return secondLayer;
    }
}
class SecondLayer {
    private ThirdLayer thirdLayer;
    public ThirdLayer getThirdLayer() {
        return thirdLayer;
    }
}
class ThirdLayer {
    private String foo;
    public String getFoo(){
        return foo;
    }
}

之前的做法是:

FirstLayer firstLayer = new FirstLayer();
if (firstLayer != null && firstLayer.getSecondLayer() != null && firstLayer.getSecondLayer().getThirdLayer() != null) {
    System.out.println(firstLayer.getSecondLayer().getThirdLayer().getFoo());
}

現(xiàn)在可以:

Optional.of(new FirstLayer()).map(FirstLayer::getSecondLayer).map(SecondLayer::getThirdLayer).map(ThirdLayer::getFoo).ifPresent(System.out::println);

在map函數(shù)內(nèi)部會進行null校驗,同時這里還使用了method reference,詳細解釋請參加:Java 8 Method Reference: How to Use it
甚至還可以:

public static  Optional resolve(Supplier resolver) {
    try {
        T result = resolver.get();
        return Optional.ofNullable(result);
    } catch (NullPointerException e){
        return Optional.empty();
    }
}
FirstLayer firstLayer = new FirstLayer();
resolve(() -> firstLayer.getSecondLayer().getThirdLayer().getFoo()).ifPresent(System.out::println);
}

其中,Supplier是一種函數(shù)式接口(Functional Interface),就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。函數(shù)式接口可以被實現(xiàn)為anonymous class,更進一步可以轉(zhuǎn)換為lambda表達式,如果只是調(diào)用了一個函數(shù),還可以用method reference。

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

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

相關(guān)文章

  • Java 8 中避免 Null 檢查

    摘要:在中避免檢查原文譯者來源在中避免檢查如何預(yù)防中著名的異常這是每個初學(xué)者遲早會問到的關(guān)鍵問題之一。引用的發(fā)明者在年道歉,并稱這種錯誤為他的十億美元錯誤。但幸運的是這在中得到了改善。檢查是在底層自動處理的。 在 Java 8 中避免 Null 檢查 原文:Avoid Null Checks in Java 8 譯者:ostatsu 來源:在 Java 8 中避免 Null 檢查 如何預(yù)...

    ethernet 評論0 收藏0
  • Java8實戰(zhàn)》-第十章筆記(用Optional取代null)

    摘要:是第一批在堆上分配記錄的類型語言之一。實際上,的這段話低估了過去五十年來數(shù)百萬程序員為修復(fù)空引用所耗費的代價。很明顯,這種方式不具備擴展性,同時還犧牲了代碼的可讀性。是目前程序開發(fā)中最典型的異常。完成這一任務(wù)有多種方法。 用Optional取代null 如果你作為Java程序員曾經(jīng)遭遇過NullPointerException,請舉起手。如果這是你最常遭遇的異常,請繼續(xù)舉手。非常可惜,...

    flybywind 評論0 收藏0
  • [譯] Java 中最常見的 5 個錯誤

    摘要:近日,在上列舉了開發(fā)中常見的個錯誤,與君共免。在多線程中并發(fā)修改集合內(nèi)容是非常常見的,因此需要使用并發(fā)編程中常用的方法進行處理,例如同步鎖對于并發(fā)修改采用特殊的集合等等。在單線程和多線程情況下解決這個問題有微小的差別。 在編程時,開發(fā)者經(jīng)常會遭遇各式各樣莫名錯誤。近日,Sushil Das 在 Geek On Java上列舉了 Java 開發(fā)中常見的 5 個錯誤,與君共「免」。 原文...

    chemzqm 評論0 收藏0
  • Java8(5):使用 Optional 處理 null

    摘要:與方法的區(qū)別在于,方法傳入的參數(shù)為一個接口的實現(xiàn)當中有值的時候,返回值當中沒有值的時候,返回從該獲得的值。為的用戶沒有找到舉一個的用途在的控制器中,我們可以配置統(tǒng)一處理各種異常。 寫過 Java 程序的同學(xué),一般都遇到過 NullPointerException :) —— 為了不拋出這個異常,我們便會寫如下的代碼: User user = getUserById(id); if (u...

    liuchengxu 評論0 收藏0
  • java 8 實戰(zhàn)》讀書筆記 -第十章 用Optional取代null

    摘要:但返回的是一個類型的對象,這意味著操作的結(jié)果是一個類型的對象。反之,如果對象存在,這次調(diào)用就會將其作為函數(shù)的輸入,并按照與方法的約定返回一個對象。 一、Optional 類入門 Java 8中引入了一個新的類java.util.Optional。變量存在時,Optional類只是對類簡單封裝。變量不存在時,缺失的值會被建模成一個空的Optional對象,由方法Optional.empt...

    時飛 評論0 收藏0

發(fā)表評論

0條評論

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