考虑以下不太有效的尝试
public void createClass() {
try {
MyClass b = (MyClass)getMyClassType().newInstance();
} catch(Exception e) {
e.printStackTrace();
}
}
public Class<?> getMyClassType() {
MyClass a = new MyClass(1);
return a.getClass();
}
public class MyClass {
private int k = 0;
public MyClass(int t) {
k = t;
}
}
上面得到
Caused by: java.lang.NoSuchMethodException
我不太清楚为什么它不起作用。
本质上我希望能够从类类型创建类,最好是这样的
Map<String, ClassType> a = new HashMap<>()
a.get("myClassName").createClassInstanceFromClassType(constructorParam1);
上面的代码在java中可以实现吗?
最佳答案
Class.newInstance
方法使用无参构造函数创建该类的新实例。然而,MyClass
没有无参构造函数;它只有您提供的单参数构造函数。这就是为什么你得到 NoSuchMethodException
。另外,方法Class.newInstance
自 Java 9 起已被弃用。
使用 getDeclaredConstructor
method传入构造函数中期望查找的参数类型。然后你可以将参数作为newInstance
的参数传递给构造函数。 .
MyClass b = (MyClass) getMyClassType().getDeclaredConstructor(int.class).newInstance(1);
此外,您可以更改 getMyClassType
的返回类型至Class<? extends MyClass>
。这允许您删除对 MyClass
的强制转换。如上所述。
关于java - 如何在运行时从类类型实例化一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53858293/