我有一个简单的 Start
类,其中包含 public Start(String[] params)
构造函数,我从其他级别的不可运行的 JAR 文件调用该类运行Java程序。一切都在运行时环境中运行。当我尝试调用 newInstance() 方法以调用此 Start
类时,就会出现问题。
类Start
看起来像这样:
public class Start {
public Start(String[] params) {
/* initialize MainStage object */
MainStage stage = new MainStage(params);
stage.show();
// MainStage DO NOT have any restriction about params.length
}
}
这就是我调用 Start
类的方式:
String[] t = new String[] {"One", "Two", "Three"};
try {
Class<?> clazz = Class.forName("org.plugin.Start");
/* line below throws the mentioned exception */
clazz.getDeclaredConstructor(String[].class).newInstance((Object[]) t);
} catch (Exception e) {
e.printStackTrace();
}
值得一提的是,除了这个 IllegalArgumentException
之外的所有内容都非常完美,这意味着 - JAR 已添加到运行时类路径中,类 Start
正在毫无问题地调用,当它的构造函数中没有参数时。
最佳答案
您需要创建一个对象数组,并将 t
放入其中,如下所示:
clazz.getDeclaredConstructor(String[].class).newInstance(new Object[]{t});
Java 告诉您传递的参数数量无效的原因是您的代码将包含三个元素的数组 t 传递给采用单个数组参数的构造函数。换句话说,您缺少了一层额外的间接寻址,因为传递给方法或构造函数的参数需要包装在每个函数参数都有一个元素的 Object[]
中。
关于Java.lang.Class.newInstance() 抛出 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975930/