java - 集合的通用类型子集合

标签 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;
}

明显的问题是泛型类型会在运行时消失,但你明白我想要做什么。

有人知道如何实现这样的事情吗?

最佳答案

您必须将 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;
}

关于java - 集合的通用类型子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38134174/

相关文章:

java - "java.net.BindException: Address already in use"当我已经在同一端口上运行服务时

带有泛型的 Java Copy 构造函数

c# - 如何根据通用类型返回字符串值

java - 从枚举构造列表<T>

c# - 如何将多个变量与单个条件进行比较?

java - 为什么ArrayList.add()会修改添加的对象?

java - Nativescript 插件的异步问题,被迫使用 .get

java - 升级到 Boot 1.2 后无法访问 Spring Boot 执行器健康端点

c# - 将泛型对象添加到泛型集合时出现编译时错误

python - 如何将 defaultdicts [of defaultdicts] 的 defaultdict 转换为 dicts [of dicts] 的 dict?