我正在做的事情的一部分涉及一个带有两个泛型类型参数(T1,T2)的函数,以及一个参数,它是一个集合。我需要获得Collection的子集合或子列表,其中包含实现或继承/ extend 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中的泛型类型。
感谢您的帮助^ _ ^
答案 0 :(得分:3)
执行此instanceof
检查的唯一方法是传递代表Class
的{{1}}对象:
type
答案 1 :(得分:-1)
假设T1低于T2的类型层次结构,那么你可以像这样声明你的方法:
<T2, T1 extends T2> void someMethod(Collection<T1> collection)
{
List<T2> sublist = new ArrayList<T2>();
for(T1 i : collection)
sublist.add(i);
}
请注意,您不需要运行时检查i
,因为如果T1未链接到T2下面的类型层次结构,编译器将抛出编译时错误