2016-06-30 151 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

有必要的子类。通用类型(和类)我想通过这个方法将是一个接口(大多数情况下)。 –