请考虑以下无效的尝试
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中以上可能吗?
答案 0 :(得分:2)
Class.newInstance
方法使用无参数构造函数创建该类的新实例。但是,MyClass
没有无参数的构造函数。它只有您给它的一个参数的构造函数。这就是为什么您得到NoSuchMethodException
的原因。此外,自Java 9开始不推荐使用方法Class.newInstance
。
使用getDeclaredConstructor
method传入构造函数中期望的参数类型以进行查找。然后,您可以将参数作为newInstance
的参数传递给构造函数。
MyClass b = (MyClass) getMyClassType().getDeclaredConstructor(int.class).newInstance(1);
此外,您可以将getMyClassType
的返回类型更改为Class<? extends MyClass>
。这使您可以删除上面MyClass
的演员表。
答案 1 :(得分:1)
您要寻找的被称为构造函数。
如果一个类没有声明构造函数,那么JVM将为您隐式创建一个构造函数。
您要尝试执行的操作非常简单,只需使用new
关键字即可实现。
从本质上讲,这就是您想要的:
class MyClass{
MyClass(){
//your implementation
}
}
class AnotherClass{
public static void main(String[] args){
MyClass myClass = new MyClass();
}
}