gpt4 book ai didi

java - 运行 main.invoke(null) 会抛出错误数量的参数

转载 作者:行者123 更新时间:2023-12-02 00:41:01 25 4
gpt4 key购买 nike

我正在为自己编写一个测试程序,该测试程序旨在处理名称以字符串形式给出的不同类。目前,我的设置如下所示:

public class Tester {

public static void main(String[] args) throws /** some exceptions **/ {

Class<?> class = Class.forName("Ex");
Method main = class.getDeclaredMethod("main", String[].class);
main.invoke(null);

}

}
//yes, these are in separate files
public class Ex {

public static void main(String[] args) {

//...

}

}

在运行时,我抛出了一个异常,并显示以下堆栈跟踪:

Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at Tester.main(Tester.java:56)

最佳答案

你可以像下面这样做:

final String[] args1 = {};
final Class<?> classa = Class.forName("test.file.LatestClass");
final Method main = classa.getDeclaredMethod("main", String[].class);
main.invoke(null, new Object[]{args1});

根据 invoke 方法的 Java 文档:

@param obj the object the underlying method is invoked from

@param args the arguments used for the method call

所以你可以传递 null 作为第一个参数,因为静态方法对象不是必需的。但是你需要传递对象参数数组。在您的情况下,它将只有一个元素,即 String[]

关于java - 运行 main.invoke(null) 会抛出错误数量的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57941493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com