Java 当参数的类型为Object[]时,通过反射调用方法

Java 当参数的类型为Object[]时,通过反射调用方法,java,reflection,Java,Reflection,我正在使用反射对以下对象调用方法: 以下是方法: Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class); id = (String) m.invoke(adminTask, new Object[]{ "a", "b", "c" }); IDEA警告我,我因调用varargs方法而创建了冗余阵列 我调用的方法实际上是一个对象[],而不是对象…,但我认为它们可能是等价的和可互换的,所以我继续

我正在使用反射对以下对象调用方法:

以下是方法:

Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new Object[]{ "a", "b", "c" });
IDEA警告我,我因调用varargs方法而创建了
冗余阵列

我调用的方法实际上是一个
对象[]
,而不是
对象…
,但我认为它们可能是等价的和可互换的,所以我继续前进

在运行时,我得到:

java.lang.IllegalArgumentException: wrong number of arguments

因此,我的
Object[]
似乎是作为
Object
s的序列传递的。这就是正在发生的事情吗?如果是这样,我如何强制它不这样做呢?

按照调用方法的方式,反射认为您传递的是三个单独的参数,而不是一个数组参数。试试这个:

id = (String) m.invoke(adminTask, new Object[]{ new Object[] {"a", "b", "c"} });
试试这个:

id = (String) m.invoke(adminTask, new Object[]{ new Object[] {"a", "b", "c"} });
Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new String[]{ "a", "b", "c" });

方法调用的签名是
public Object invoke(Object obj,*Object…args*)
,Idea有一个检查,当传递一个数组时会触发,而预期的是相同类型的vararg。

在实际代码中,您用什么来代替
是最相关的部分。你能展示一下你真正的代码中有什么吗?Java中的Varargs只是语法糖。编译器将
Object…
转换为
Object[]
。所以,是的,它们是等价的。啊,我想试试这个,但没有,因为看起来太不可能了。谢谢