Optional.ofNullable()方法


舉個栗子

public static void main(String[] args) {
        List<String> list = null;
        list.forEach(x -> System.out.println(x));
    }

工作中經常會遇到,查詢返回空,如果沒有判空處理,一不小心就會空指針異常。加上if判斷處理也可以,但是jdk1.8有更優雅的處理方式。

public static void main(String[] args) {
        List<String> list = null;
        List<String> newList = Optional.ofNullable(list).orElse(Lists.newArrayList());
String s = null;

     String result = Optional.ofNullable(s).orElse("值為空“);
     
        newList.forEach(x -> System.out.println(x));
    }

先解釋代碼含義:如果list集合不為空,將list集合賦值給newList;如果list集合為空創建一個空對象集合賦值給newList,保證list集合永遠不為空,也就避免了空指針異常。(為了更好的理解,分開寫了,比較庸俗,實際工作中都是一行搞定,哈哈哈)

再看看源碼:底層是怎么處理的,怎么就避免了空指針呢?

 

靜態變量 empty
private static final Optional<?> EMPTY = new Optional<>();
 
//如果對象為空,執行empty()方法;不為空,執行of(value)方法
public static <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }
 
public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }
 
public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }

1.首先執行ofNullable()方法,如果T對象為空,執行empty()方法;不為空,執行of(value)方法;
2.empty()方法,初始化一個空對象Optional(空對象和null不是一回事哈);

3.of(value)方法,將泛型對象T用於Optional構造方法的參數上,返回一個有值的對象

4.經過上面兩步,從而保證了Optional不為null,避免了空指針;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM