如何从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