java - 如何获取传递的集合<通用类型>的子集合,其中成员扩展或实现另一个集合?

标签 java generics collections instanceof

我正在做的事情的一部分涉及一个带有两个泛型类型参数(T1,T2)的函数,以及一个参数,它是一个集合。我需要获取 Collection 的子集合或子列表,其中包含实现或继承/扩展 T2 的集合的所有成员。

我最初的想法是采用对我来说似乎显而易见的方式来做到这一点,即:

<T1, T2> void someMethod(Collection<T1> collection)
{
    List<T2> sublist = new ArrayList<T2>();

    for(T1 i : collection)
        if(i instanceof T2)
            sublist.add((T2)i);
}

但是instanceof不能用于Java中的泛型类型。

感谢您的帮助^_^

最佳答案

执行此 instanceof 检查的唯一方法是传递表示 typeClass 对象:

<T1, T2> void someMethod(Collection<T1> collection, Class<T2> type) {
        List<T2> sublist = new ArrayList<T2>();

        for (T1 i : collection) {
            if (type.isAssignableFrom(i.getClass())) {
                sublist.add((T2) i);
            }
        }


    }

关于java - 如何获取传递的集合<通用类型>的子集合,其中成员扩展或实现另一个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951672/

相关文章:

java - 使用Videoview或mediaplayer播放http直播流视频是LAG

java - 使用 <?> 参数调用通用 Java 函数

c# - 如何列出实现抽象类和接口(interface)(C#)的东西?

java - 如何将参数化类作为参数传递

Java:将数组转换为列表异常

java - 如何使用 JDBC 驱动程序获取 DB2 中所有现有数据库的列表?

java - 锯齿状阵列;检查列值增加

java - 如何通过 com.android.volley.Request 发送数组类型参数

java - 何时使用 Java 中的各种通用容器

java - 对于较大卷集合,JDBC 更新失败?