我想在运行时创建java类的实例(它们都扩展了超类)。
这里有一些示例类:
class Super {
}
class FirstSub extends Super {
}
class SecondSub extends Super {
}
我知道类名为string:
String name = "SubClassName";
这是我的第一个方法:
Super foo;
if (FirstSub.class.getSimplename().equals(name)) {
foo = new FirstSub();
}
if (SecondSub.class.getSimplename().equals(name)) {
foo = new SecondSub();
}
如何以更复杂的方式获取其中一个“子类”的实例?
编辑:此外,我想将foo
投射到SubClassName
。
答案 0 :(得分:9)
Class myClass = Class.forName(name);
Object o = myClass.newInstance();
Super instance = (Super)o;
//Subclass instance2 = (Subclass)o;
动态强制转换你的变量引用将是Subclass是不可能的,也是不值得的。如果在这个地方你的对象可能是FirstSub或SecondSub,那么这个对象都应该提供一些给定的功能(方法)。您应该在超类中定义一些(例如抽象)方法(或使其成为接口)。然后,如果你有这样的一行:
Super instance = (Super)o;
其中o是Super的子类的实例,然后调用您的方法将调用子类的方法。这是多态的美丽
答案 1 :(得分:3)
Super s = (Super) Class.forName(str).newInstance();
我想这会奏效。
答案 2 :(得分:0)
这是示例
try{
Class my_class = Class.forName(class_name);
// use my_class object to
Object initClassObj = my_class.newInstance();
}catch(ClassNotFoundException ex){
// handle exception
}catch(Exception ex){
// handle other exception
}