2011-04-14 56 views
0

所以,我有以下幾點:的Java內部類/閉

Object a = data.getA(); 
Object b = data.getB(); 
Object c = data.getC(); 
// and so on 

這些對象是從API調用檢索並可以爲空。我想把這些對象放到一個List中,但前提是它們不爲null。

我可以寫一堆線:if(a!=null) {myList.add(a}等等。但我覺得有一種更優雅的方式可以避免每次都必須執行空檢查(除了創建輔助方法來執行此操作外)。例如,使用javascript,我可以創建一個閉包。任何想法的Java?

+3

什麼是錯小oneliner helper方法? – RoflcoptrException 2011-04-14 12:33:53

+0

它沒有什麼不對。但我只是想看看是否有一種方法來模擬可以用動態語言實現的內聯閉包類型解決方案(想想lambda)。可能會使用內聯類。另外,我可以看到,如果它的一次性拋棄邏輯是有意義的,而不是具有實用方法,那麼這是有用的。 – jack 2011-04-14 12:44:49

+0

問題是,儘管Java中存在類lambda結構,但它們不像其他語言那樣簡潔,並且使得(可能是私有的)輔助方法成爲最優雅的解決方案。 – 2011-04-14 13:01:35

回答

3

你可以在谷歌代碼嘗試Project LambdaJ,它是在一個條件下使用閉包與Java

過濾非常成熟:

要在篩選集合的項目給定的條件是一個非常普遍的任務,使用lambdaj可以像在下面的例子一樣容易:

List<Integer> biggerThan3 = filter(greaterThan(3), asList(1, 2, 3, 4, 5)); 

定義如何過濾列表的條件表示爲hamcrest匹配器。

或者你可以等待JDK 8 :-)

7

實用方法如何?

public static <T> void addIfNotNull(Collection<T> col, T element){ 
    if(element != null){ 
     col.add(element); 
    } 
} 
+0

當然這會奏效;但我的問題是詢問是否有一種方法沒有這樣做(「除了創建一個輔助方法來做到這一點」)。不過謝謝你。 – jack 2011-04-14 12:48:02

+0

檢查將在某處確定。 – 2011-04-14 13:09:31

0
List list = new ArrayList(); 

add(data.getA()); 
add(data.getB()); 
add(data.getC()); 

private add(Object o) { 
    if (o != null) { 
     list.add(o); 
    } 
}