Java.lang.Constructor.newInstance()抛出IllegalArgumentException - 内部类和抽象类

时间:2018-04-16 20:27:51

标签: java constructor processing abstract-class

我需要使用反射在运行时创建未知类型的非静态类的新实例。代码和错误消息如下。该类将始终具有扩展抽象类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是抽象类或两者兼备的方式有关。有什么建议吗?

0 个答案:

没有答案