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
(即t
是Parent
或Parent
的子类)。之后,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 .