Java反射:动态创建类实例并将其分配给父对象


String child = "C";
Parent p = null;
try {
    Class c1 = new Class.forName(child);
    Constructor co = c1.getConstructor();
    // p=co.newInstance(null); //This gives compilatoin error cannot
    // conver object to Parent
    // p=(c1.getClass())co.newInstance(null);//also gives cast errror
    p = (Parent) co.newInstance(null);// this works but it typecasts the
    // child to Parent
} catch (Exception e) {
}

我想做什么?

我有多个继承自Parent的子类。我得到子类名作为字符串输入。

我想实例化Child类的对象并将其分配给Parent。我不想将Child类型强制转换为Parent。在后面的代码中,我需要比较两个子类。如果我把它类型转换为Parent。我分不清Child1和Child2

类型转换对对象本身绝对没有影响。使用p = (Parent) t只是对t进行运行时检查,以确保t的类型可分配给Parent(即tParentParent的子类)。之后,t仍然是Child1或者它的实际类型一直是什么。

您可以尝试这样做:

Object parent = null;
String child = String.class.getName();  //not necessary, can just use String.class directly
Class childClass = Class.forName(child);
Class parentClass = Object.class;
if (parentClass.isAssignableFrom(childClass)) {
    parent = childClass.newInstance();
}
System.out.println("Parent is:  " + parent);

即使是父元素也会从两个不同的子元素中强制转换为

Parent parent1 = (Parent)child1;
Parent parent2 = (Parent)child2;

parent1和parent2是完全不同的,基于每个孩子。

您可以通过将它们打印为

来查看差异。
System.out.println(parent1.getClass().getName());
System.out.println(parent2.getClass().getName());

那么你也可以使用getName()来比较。

我希望这可能有助于达到要求。

问候,

Charlee Ch .

相关内容

  • 没有找到相关文章

最新更新