2013-02-15 64 views
17

是否有這樣一個在JDK或谷歌番石榴是否有JDK或番石榴方法把空進空單

public static <T> Collection<T> safe(Collection<T> collection) { 
    if (collection == null) { 
     return new ArrayList<>(0); 
    } else { 
     return collection; 
    } 
} 

這使得它很容易不上崩潰的增強型循環的方法如果某事返回空列表例如

for (String string : CollectionUtils.safe(foo.canReturnANullListOfStrings())) { 
    // do something 
} 

不會崩潰。

我環顧四周,卻找不到任何這樣的方法,而且我想知道我是否錯過了它,或者如果有這樣一個方便的方法不方便,因此不包括在內的原因?

+2

方法不應該首先返回'null'集合。 – SLaks 2013-02-15 21:26:20

+1

我相信這樣的方法可以使用'Collections.emptyList()'方便地編寫。 – 2013-02-15 21:27:24

+1

@SLaks原則上同意,但你不能控制其他人的代碼:) – ams 2013-02-15 21:35:16

回答

20
Objects.firstNonNull(list, ImmutableList.<Foo>of()); 

沒有必要進行專門的方法,這is indeed我們建議當你從一個頑皮的API,理想不應該做讓潛在的空收集您立即使用的解決方案,擺在首位。

1

因此,我不知道這種功能。但是,如上所示,編寫一個並不重要。爲什麼它可能沒有被包括在內的原因是因爲null具有特定的含義,因此當傳遞一個空的Collection可能不合適。一般情況下(根據我的經驗),當一個空值進入系統時,鏈上的某些東西失敗了,或者一個無效值沒有被正確地消毒。

2

在Java 8,可以使用:

Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList());