如何从包含子类的父类数组强制转换回父类



我有一个Parent的列表,其中包含Parent的子类,例如Child1Child2。现在我想通过

从那里获得一个元素
public <T> T getChild(Class<T> tClass)
{
for(Parent i: parents)
{
if(i.getClass==tClass)
{
return(T)i;
}
}
return(null);
}

然而,由于某种原因,这是返回null,即使我去parents.add(new Child1());之前调用函数。如果你有解决办法,我将非常欢迎。

这段代码适用于我,虽然我不确定这是你正在寻找的。

import java.util.List;
public class Parent {
private static List<? extends Parent>  parents;
@SuppressWarnings("unchecked")
public static <T> T getChild(Class<T> childClass) {
for (Parent i : parents) {
if (i.getClass().equals(childClass)) {
return (T) i;
}
}
return null;
}
public static void main(String[] args) {
Child1 c1 = new Child1();
Child2 c2 = new Child2();
Parent p = new Parent();
parents = List.of(p, c2, c1);
System.out.println(getChild(c2.getClass()));
}
}
class Child1 extends Parent {

}
class Child2 extends Parent {

}
当我运行上面的代码时,输出是
Child2@34c45dca

参考
https://docs.oracle.com/javase/tutorial/java/generics/index.html

http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

最新更新