Java Reflections错误:参数数量错误

时间:2013-01-24 00:07:34

标签: java reflection constructor

所以我试图在运行时调用类构造函数。我有以下代码段:

String[] argArray = {...};
...
Class<?> tempClass = Class.forName(...);
Constructor c = tempClass.getConstructor(String[].class); 
c.newInstance(argArray);
...

每当我编译代码并将其传递给类时,我都会收到IllegalArgumentException:错误的参数数量。我正在调用的类的构造函数接受String []作为唯一的参数。同样奇怪的是,如果我改变构造函数以获取整数并使用Integer.TYPE并调用c.newInstance(4)或其他东西,它就可以工作。有人可以向我解释我做错了什么吗?谢谢。

编辑;;完成错误:

java.lang.IllegalArgumentException: wrong number of arguments
[Ljava.lang.String;@2be3d80c
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)

2 个答案:

答案 0 :(得分:10)

这种情况正在发生,因为newInstance(Object...)需要Object varargs,换句话说Object[]。由于数组是协变的,String[]也是Object[]argArray被解释为所有参数而不是第一个参数

jdb's solution有效,因为它可以防止编译器误解。你也可以写:

c.newInstance(new Object[] {argArray});

答案 1 :(得分:9)

我不确定它是否是最佳解决方案,但这应该有效:

c.newInstance((Object)argArray);