【发布时间】:2012-03-07 04:19:02
【问题描述】:
我正在使用反射来调用a class that is dynamically constructed at runtime上的方法:
public String createJDBCProvider(Object[] args)
方法如下:
Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new Object[]{ "a", "b", "c" });
IDEA 警告我,我犯了redundant array creation for calling varargs method 的罪行。
我调用的方法实际上需要一个Object[],而不是Object ...,但我认为它们可能是等效的且可以互换的,所以我继续前进。
在运行时我得到:
java.lang.IllegalArgumentException: wrong number of arguments
因此,我的Object[] 似乎是作为Objects 的序列传递的。这是正在发生的事情吗?如果是这样,我怎么能强迫它不这样做?
【问题讨论】:
-
你在实际代码中用什么代替
...是最相关的部分。您能否展示一下您的真实代码中的内容? -
Java 中的可变参数只是语法糖。编译器将
Object...转换为Object[]。所以是的,它们是等价的。
标签: java reflection