运行以下代码:
public class Test {
public Test(Object[] test){
}
public static void main(String[] args) throws Exception{
Constructor cd = Test.class.getConstructor(Object[].class);
Object[] objs = {1, 2, 3, 4, 5, 6, 7, 8};
cd.newInstance(objs);
}
}
我得到错误:
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at groupd.poker.utils.tests.ai.nqueens.Test.main(Test.java:17)
这是为什么?
最佳答案
newInstance()构造函数类的方法采用对象数组。数组中的每一项都是您正在调用的构造函数的参数。您的类的构造函数采用一个对象数组,因此您需要在传递给新实例方法的数组中包含一个对象数组
public static void main(String[] args) throws Exception{
Constructor cd = Test.class.getConstructor(Object[].class);
Object[] objs = {1, 2, 3, 4, 5, 6, 7, 8};
Object[] passed = {objs};
cd.newInstance(passed);
}
关于java - 使用反射和数组参数构造类的 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760569/