集合的通用类型子集合

时间:2016-06-30 22:21:26

标签: java generics collections types filtering

我想编写一个帮助方法,它将返回一个对象集合的通用类型子集合,但我需要一些帮助!

以下是我想要的方式:

    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 个答案:

答案 0 :(得分: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;
}