gpt4 book ai didi

java - 为什么我通过反射调用 main 时参数个数错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:57 25 4
gpt4 key购买 nike

我有一个类对象,我想调用一个静态方法。我有以下代码。

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[]{});

这打印:

1
[class [Ljava.lang.String;]
main

但随后它抛出:

IllegalArgumentException: wrong number of arguments

我在这里忽略了什么?

最佳答案

你将不得不使用

m.invoke(null, (Object)new String[]{});

invoke(Object, Object...)方法接受一个 Object...(更正) 传递的 String[] 数组用作 Object[] 并且是空的,因此它没有要传递给您的元素方法调用。通过将其转换为 Object,您表示这是包装 Object[] 中的唯一元素。

这是因为数组协方差。你可以做

public static void method(Object[] a) {}
...
method(new String[] {});

因为 String[]Object[]

System.out.println(new String[]{} instanceof Object[]); // returns true

或者,您可以将 String[] 包装在 Object[]

m.invoke(null, new Object[]{new String[]{}});

然后该方法将使用 Object[] 中的元素作为您的方法调用的参数。

小心调用 main(..) 的 StackOverflowError。

关于java - 为什么我通过反射调用 main 时参数个数错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022368/

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