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类。我将子类名称作为字符串输入。
我想实例化Child类的对象并将其分配给Parent。我不想将强制转换Child输入到Parent。在后面的代码中,我需要比较两个Child类。如果我将它强制转换为Parent。我无法区分Child1和Child2。
答案 0 :(得分:3)
我不认为您理解“类型转换”的含义。对象本身绝对没有影响。使用p = (Parent) t
只需对t
进行运行时检查,以确保t
的类型可分配给Parent
(即t
是{a} {{ 1}}或者它是Parent
的子类。之后,Parent
仍然是t
或其实际类型的所有内容。
使用显式强制转换。
答案 1 :(得分:1)
您可以尝试以下方式:
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);
答案 2 :(得分:0)
即使是父母也是由2个不同的孩子组成的
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。