如何从Java列表中获取一种类型的所有实例?

如何从Java列表中获取一种类型的所有实例?,java,generics,Java,Generics,我的代码中有些部分如下所示: A、B和C扩展D 公共数组列表getA(){ ArrayList等位基因=新的ArrayList(); 对于(D el:listOfDs){ 如果(A的el实例){ 等位基因。添加((A)el); } } 返回等位基因; } 公共数组列表getB(){ ArrayList等位基因=新的ArrayList(); 对于(D el:listOfDs){ if(el instanceof B){ 等位基因。添加((B)el); } } 返回等位基因; } 公共数组列表get

我的代码中有些部分如下所示:

A、B和C扩展D
公共数组列表getA(){
ArrayList等位基因=新的ArrayList();
对于(D el:listOfDs){
如果(A的el实例){
等位基因。添加((A)el);
}
}
返回等位基因;
}
公共数组列表getB(){
ArrayList等位基因=新的ArrayList();
对于(D el:listOfDs){
if(el instanceof B){
等位基因。添加((B)el);
}
}
返回等位基因;
}
公共数组列表getC(){
ArrayList等位基因=新的ArrayList();
对于(D el:listOfDs){
if(el instanceof C){
等位基因。添加((C)el);
}
}
返回等位基因;
}
我想将所有这些结合到一个方法中,如下所示:

public ArrayList get(){
ArrayList等位基因=新的ArrayList();
对于(D el:listOfDs){
if(el instanceof T){
等位基因。添加((T)el);
}
}
返回等位基因;
}
这在Java中可能吗

在我到达的那一刻

无法对类型参数T执行instanceof检查。请改用 它的擦除对象,因为进一步的泛型类型信息 在运行时被擦除

类型安全:未选中从节点到T的强制转换

然后我试过这个:

@SuppressWarnings(“未选中”)
公共数组列表get(类clazz){
ArrayList等位基因=新的ArrayList();
对于(DO:listOfDs){
if(o.getClass()==clazz){
等位基因。添加((T)o);
}
}
返回等位基因;
}
它不会抛出任何错误,但我如何调用它?这不起作用:

get(A);
你可以用番石榴汁

用法示例:

Iterable<X> xs = Iterables.filter(someIterable, X.class);
Iterable xs=Iterables.filter(someIterable,X.class);

由于它是一个开放源代码库,您可以查看源代码以找出您的错误所在。

谢谢,X.class正是我要找的:-)但很高兴知道Iterables.filer存在。Ds列表的类型是什么?你不能把Ds列为Listp.s吗。您应该使用
clazz.isInstance(o)
而不是
o.getClass()==clazz
<当
o
属于
clazz
的子类时,isInstance(o)将起作用,就像
instanceof