我需要使用反射在运行时创建未知类型的非静态类的新实例。代码和错误消息如下。该类将始终具有扩展抽象类Formula的某种类型。在下面的代码中,DucksJ是一个扩展抽象类Formula的类。类Parameter中的字段是Parameter.formula,类型为Formula。 Formula的封闭类是Basic_fractal_1_0(我认为 - 无论如何,这是包含该类的Processing草图的名称)。任何帮助将不胜感激 - 谢谢!
/* constructor for public class Parameter */
public Parameter(JSONObject param) {
Object[] parameters = new Object[];
// some code that loads variables of multiple types into parameters
String className = ("Basic_fractal_1_0$" + param.getString("Formula Type"));
Class<?> innerClass = Class.forName(className);
Class<?> outerClass = Class.forName("Basic_fractal_1_0");
System.out.println(innerClass);
System.out.println(outerClass);
Constructor con = innerClass.getDeclaredConstructors()[0];
System.out.println(con);
try {
this.formula = (Formula)con.newInstance(parameters);
} catch (Exception e) {
System.out.println(e.toString());
}
// some additional code
}
当我运行它时,输出如下:
class Basic_fractal_1_0$DucksJ
class Basic_fractal_1_0
public Basic_fractal_1_0$DucksJ(java.lang.Object[])
java.lang.IllegalArgumentException: wrong number of arguments
在看了这里和类似的建议之后
https://github.com/processing/processing/issues/3446 How to instantiate a non-static inner class with reflection in Java?)
我也尝试过:
... try {
this.formula = con.newInstance(sketchClass);
} catch (Exception e) ...
这会导致java.lang.IllegalArgumentException:参数类型不匹配。
我也尝试过:
... try {
this.formula = con.newInstance(sketchClass, parameters);
} catch (Exception e) ...
然后我得到java.lang.IllegalArgumentException:错误的参数数量
如果我尝试使用公式f =(公式)con.newInstance(new outerClass(),参数),编译器告诉我&#34;类outerClass不存在。&#34;
我不确定问题是否与我使用Constructor.newInstance()或者Formula是抽象类或两者兼备的方式有关。有什么建议吗?