当我在java中将类名称知道为String时,如何获取SubClass实例?

时间:2011-08-30 07:02:02

标签: java class polymorphism

我想在运行时创建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

3 个答案:

答案 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 
}