2009-11-17 15 views
2

是否有類似的方法來處理集合的StringUtils.defaultString,所以你可以避免檢查null值,因爲在大多數情況下,所需的效果就像它是一個空列表一樣?StringUtils.defaultString用於收藏的委婉說法?

例如有東西來取代

if (list != null) { 
    for (String item: list) { 
     // ... 
    } 
} 

for (String item: ListUtils.defaultList(list)) { 
    // ... 
} 

使用三元運算符是相當醜陋,導致未選中轉換錯誤:

List<String> safelista = (List<String>) (list != null ? list : Collections.emptyList()); 
List<String> safelistb = (list != null ? list : Collections.EMPTY_LIST);   

把它內聯,甚至醜陋。

+0

好主意,像Commons Lang中的'StringUtils.trimToEmpty()',但集合。 – skaffman 2009-11-17 15:39:17

+0

您可以使用'列表 safelista =(list!= null?list:Collections。 emptyList());'來避免在三元運算符中投射。雖然這不能解決你的*實際問題。 – 2009-11-17 15:45:07

+0

已將此意見報告爲Google收藏的增強功能...請參閱http://code.google.com/p/google-collections/issues/detail?id=299 – Cowan 2009-11-18 06:25:12

回答

3

你有控制返回有問題的列表的方法嗎?如果是這樣,我會改變它,以便它永遠不會返回null,但只是一個空的列表案例。這也是更正常的慣例。

+0

不,在這種情況下,它是一種方法參數,雖然我同意這是一個很好的約定。我總是確保將我的收集字段初始化爲適當的空集合。 – pimlottc 2009-11-17 15:43:11

+0

然後,我會去只是一個空檢查,如果有必要拋出'IllegalArgumentException'。或者(我的建議)只是忽略這一切,並假設它從不爲空(在方法的javadoc中記錄它,儘管它需要一個非空集合,並且可能會拋出NPE或IAE)。 – BalusC 2009-11-17 15:45:13

+0

我使用的前提條件是參數不能爲空,並強制調用者做正確的事情...(所以如果(x列表==空)拋出新的IllegalArgumentException(「列表不能爲空」);然後我從來沒有擔心空值)。 – TofuBeer 2009-11-17 17:53:50

3

除了使用三級運營商,則必須定義一個使用if()一個輔助函數:

public static <T> List<T> nullToEmpty (List<T> list) { 
    if (list == null) 
     return Collections.emptyList(); // Can't use ?: here! 
    return list; 
} 
+0

或稍微更一般地說,'列表 nullToEmpty(列表列表)' – skaffman 2009-11-17 15:58:00

+0

在這種情況下沒有意義。我返回完全一樣的列表。 – 2009-11-17 16:50:00