我有一个Class对象,我想调用一个静态方法.我有以下代码.
Method m=cls.getMethod("main",String[].class);
System.out.println(m.getParameterTypes().length);
System.out.println(Arrays.toString(m.getParameterTypes()));
System.out.println(m.getName());
m.invoke(null,new String[]{});
Run Code Online (Sandbox Code Playgroud)
这打印:
但随后它抛出:
IllegalArgumentException: wrong number of arguments
Run Code Online (Sandbox Code Playgroud)
我在这里俯瞰什么?
Sot*_*lis 10
你将不得不使用
m.invoke(null, (Object)new String[] {});
Run Code Online (Sandbox Code Playgroud)
该invoke(Object, Object...)方法接受a Object....(更正)String[]传递的数组用作它Object[]并且为空,因此它没有要传递给方法调用的元素.通过将它转换为Object,你说这是包装中唯一的元素Object[].
这是因为阵列协方差.你可以做
public static void method(Object[] a) {}
...
method(new String[] {});
Run Code Online (Sandbox Code Playgroud)
因为a String[]是a Object[].
System.out.println(new String[]{} instanceof Object[]); // returns true
Run Code Online (Sandbox Code Playgroud)
或者,你可以包装你String[]的Object[]
m.invoke(null, new Object[]{new String[] {}});
Run Code Online (Sandbox Code Playgroud)
然后,该方法将使用Object[]方法调用的as参数中的元素.
小心调用StackOverflowError main(..).
| 归档时间: |
|
| 查看次数: |
4744 次 |
| 最近记录: |