gpt4 book ai didi

java - GetMethod 并通过反射传递 Object[] 作为参数来调用它

转载 作者:行者123 更新时间:2023-12-01 07:56:34 34 4
gpt4 key购买 nike

我有以下抛出异常的代码片段,问题似乎出在我试图传递给“foo”方法的参数上。

public void test() {
try {
Class<?>[] paramType = new Class[] { Object[].class };

Method m = this.getClass().getMethod("foo", paramType);

Object tt = (Object)new String("TEST");

m.invoke(this, new Object[] { tt });

} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void foo(Object[] params) {
System.out.println("ffffoooooo" + params);
}

异常(exception):

java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at reflection.MyReflection.invokeMethod(MyReflection.java:50)
at reflection.MyReflection.main(MyReflection.java:20)

有人能发现我的错误吗?

最佳答案

Method.invoke 方法采用一个 Object[] 参数,该参数对应于您要提供的参数。

由于您有一个 Object[] 类型的参数,因此您需要将其包装在另一个 Object[] 中。例如:

m.invoke(this, new Object[] { new Object[] { tt } });

或者您可以使用它是 invoke 上的 varargs 参数这一事实:

Object argument = new Object[] { tt };
m.invoke(this, argument);

请注意,argument 的编译时类型为 Object 而不是 Object[] 在这里很重要,以便使编译器由于可变参数创建数组。如果您将 argument 声明为 Object[] 类型,编译器不会将其包装在另一个数组中。

关于java - GetMethod 并通过反射传递 Object[] 作为参数来调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372052/

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