如果我将该类名保存在字符串中,我想知道如何创建某个类的新对象。
例如。我想创建一个FooClass的对象就像是:
String className = "FooClass";
className.toClass() newObject = new (className.toClass())();
我已经做了很多搜索,但一直无法找到答案。
由于
答案 0 :(得分:2)
如Oracle Documentation中所述,您可以通过以下方式执行此操作:
Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
让我提供一个非常简单的例子:
假设我们有Main
类,我们需要实例化的类在同一个包中 。然后我们可以采取以下行动:
我们需要实施的课程:
public class MyClass {
public int myInt;
public MyClass(Integer myInt){
this.myInt = myInt;
}
}
main
方法:
public static void main(String[] args) throws Exception {
//Class name must contain full-package path
// e.g. "full.pack.age.classname"
String className = Main.class.getPackage().getName() + ".MyClass";
Class<?> clazz = Class.forName(className);
//Class.getConstructor(Class<?> ... parameters) gives you a suitable constructor
//depends on the argument types you're going to pass to them.
Constructor<?> ctor = clazz.getConstructor(Integer.class);
//Object creation and constructor call
Object object = ctor.newInstance(new Object[] { 1 }); //1 is just myInt value passes to a contructor being invoked.
System.out.println(((MyClass) object).myInt); //Prints 1
}