2016-06-30 204 views
0

我想編寫一個幫助器方法,它將返回對象集合的通用類型子集合,但我需要一些幫助!集合的通用類型子集合

這裏是我要如何做到這一點:

public static <T> Collection<T> getTypeFilteredSubCollection(Collection<Object> objects) { 
    Collection<T> typeFilteredCollection = new ArrayList<T>(); 
    for(Object object : objects) { 
     if(object instanceof T) { 
      typeFilteredCollection.add((T)object); 
     } 
    } 
    return typeFilteredCollection; 
} 

明顯的問題是,泛型類型會消失運行,但你得到什麼,我試圖做的想法。

有沒有人有一個想法如何實現這樣的東西?

回答

1

你將不得不把類的T與它一起,並使用Class::isAssignableFrom

public static <T> Collection<T> getTypeFilteredSubCollection(Collection<Object> objects, Class<T> clazz) { 
    Collection<T> typeFilteredCollection = new ArrayList<T>(); 
    for(Object object : objects) { 
     if(clazz.isInstance(object)) { 
      typeFilteredCollection.add((T)object); 
     } 
    } 
    return typeFilteredCollection; 
} 
+1

爲什麼不直接使用'clazz.isInstance(對象)'? –

+1

@LouisWasserman這將排除子類型,我認爲他們也會被要求。 –

+0

有必要的子類。通用類型(和類)我想通過這個方法將是一個接口(大多數情況下)。 –