我正在做的事情的一部分涉及一个带有两个泛型类型参数(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
检查的唯一方法是传递表示 type
的 Class
对象:
<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/