我想在运行时创建 java 类的实例(它们都扩展父类(super class))。
这里有一些示例类:
class Super {
}
class FirstSub extends Super {
}
class SecondSub extends Super {
}
我知道类名是字符串:
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
。
最佳答案
Class myClass = Class.forName(name);
Object o = myClass.newInstance();
Super instance = (Super)o;
//Subclass instance2 = (Subclass)o;
动态地将变量引用转换为子类是不可能的,也是不值得的。如果在这个地方你的对象可能是 FirstSub 或 SecondSub 那么这两个对象都应该提供一些给定的功能(方法)。您应该在父类(super class)中定义一些(例如抽象)方法(或使其成为接口(interface))。然后,如果你有这样的行:
Super instance = (Super)o;
其中 o 是 Super 子类的实例,然后调用您的方法将调用子类上的方法。这就是多态性之美
关于java - 当我知道Java中的类名称为字符串时,如何获取子类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239711/