JAVA 中的 Optional詳解

從 Java 8 引入的一個很有趣的特性是 Optional  類。Optional 類主要解決的問題是臭名昭著的空指針異常(NullPointerException) —— 每個 Java 程序員都非常瞭解的異常。

本質上,這是一個包含有可選值的包裝類,這意味着 Optional 類既可以含有對象也可以爲空。

Optional 是 Java 實現函數式編程的強勁一步,並且幫助在範式中實現。但是 Optional 的意義顯然不止於此。

我們從一個簡單的用例開始。在 Java 8 之前,任何訪問對象方法或屬性的調用都可能導致 NullPointerException

String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();

在這個小示例中,如果我們需要確保不觸發異常,就得在訪問每一個值之前對其進行明確地檢查:

if (user != null) {
    Address address = user.getAddress();
    if (address != null) {
        Country country = address.getCountry();
        if (country != null) {
            String isocode = country.getIsocode();
            if (isocode != null) {
                isocode = isocode.toUpperCase();
            }
        }
    }
}

你看到了,這很容易就變得冗長,難以維護。

爲了簡化這個過程,我們來看看用 Optional  類是怎麼做的。從創建和驗證實例,到使用其不同的方法,並與其它返回相同類型的方法相結合,下面是見證 Optional  奇蹟的時刻。

 

of方法

如果對象爲空就會報NullPointerException,

ofNullable方法

如果不知道對象是否爲空,就用這個方法

想要獲取對象,可以用get()方法

ifPresent方法

該方法除了執行檢查,還接受一個Consumer(消費者) 參數,如果對象不是空的,就對執行傳入的 Lambda 表達式:

ifPresentOrElse方法

在JDK1.9後改進了 Optional 類增加了 ifPresentOrElse 方法,此方法支持了if (user != null) else { // xxx}的操作

orElse方法

如果對象不爲空就直接返回,如果爲空,就返回給定值.

orElseThrow方法

如果對象爲空,則可以拋出異常

轉換值

map()方法

可以拿到對象裏面的屬性

filter方法

過濾數據,拿到和條件相等的數據

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章