Java8的Optional類解決NPE,同時又避免多次if-else

像我這種Java初學者非常容易寫出NPE,爲了避免NPE,會很無奈的使用多次if做判斷,感覺代碼會很難看。

今天偶爾看到了Optional方法,是Java8提供的一種新寫法,覺得很有意思,記錄一下。

通過dubbo的遠程調用會經常寫出這種類似的代碼,雖然多次通過if判斷避免空指針,而且也提前返回了結果,但是還是感覺這種寫法比較難看:

response = dubboService.get();
if(response == null){
    retrun new ArrayList<>();
}
if(response.getData() == null || CollectionUtils.isEmpty(response.getData().getList())){
    retrun new ArrayList<>();
}
return response.getData().getList();

但是使用Optional類可以寫出一種新的簡單的寫法:

Optional.ofNullable(response).map(Response::getData).map(Data::getList).orElseGet(ArrayList::new);

1、ofNullable(T value)方法遇到value爲空時直接返回一個EMPTY對象,而不是直接返回null。

2、orElseGet(Supplier<? extends T> other)方法遇到值爲null時,會執行內部的方法。

3、map(Function<? super T, ? extends U> mapper)方法是進行一組值轉換操作。

除此之外,Optional類還提供了了許多類似過濾,判空操作,都可以提供非常優雅的寫法,但是同時使用Optional類的代碼,可讀性會低一些,需要根據實際情況考慮使用。

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