java - 使用反射和数组参数构造类的 IllegalArgumentException

标签 java arrays reflection

运行以下代码:

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/

相关文章:

c# - 数组索引超出范围,但应进行定义。编程新手

ios - 数据从全局数组中消失

c# - 避免歧义匹配异常

java - 通过调用另一个java程序捕获异常

java - 为什么主要方法被标记为公开的?

java - Spring 安全java.lang.AbstractMethodError

java - 公共(public)静态方法返回问题

c++ - 为数组分配新值时系统崩溃

c# - 为什么类型 System.__ComObject 声称(有时)是公开的,而实际上不是?

java - 如果库因未找到错误类而存在,则在 Web 项目中检查什么?