当前位置: 首页 > 面试题库 >

IllegalArgumentException与使用反射和数组参数构造类

房学文
2023-03-14
问题内容

运行以下代码:

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);
    }


 类似资料:
  • 问题内容: 例如: 清除代码。 但是,如果我添加带有参数的构造函数,则如下所示: 我懂了: 因此,不,我不知道如何通过构造函数传递参数。 请帮忙。 问题答案: 您需要说出您要使用pass it参数的构造函数。

  • 我正在编写一个学习反射的示例应用程序。我试图使用反射从另一个类调用一个类中定义的主方法,但我得到了 线程“main”java中出现异常。lang.IllegalArgumentException:参数类型不匹配 在下面查找我正在尝试执行的代码。 调用main方法的类 要调用其主方法的类

  • 问题内容: 简单的问题,如何使此代码起作用? 输出: 问题答案: 作品。问题在于仅搜索方法。从javadoc: 返回一个Method对象,该对象反映此Class对象表示的类或接口的指定公共成员方法。 更新: 成功获取方法后,可以使用以下方法调用它: 即- 用一个元素创建一个新数组-该数组。使用变量名,它看起来像:

  • 我正在使用一个较旧版本的自动化脚本,该脚本登录到一个页面并运行测试。 我们希望将经典的selenium构造函数更改为WebDriverBackedSelenium构造函数,以便进行更多相关的测试。 我们最初的构造函数调用是: 如何使用相同的参数设置WebDriverBackedElenium构造函数?API显示我们需要将构造函数设置为: 似乎没有任何关于selenium服务器运行的位置、端口和浏览

  • Kotlin中的参数与Java中有些不同。如你所见,我们先写参数的名字再写它的类型: fun add(x: Int, y: Int) : Int { return x + y } 我们可以给参数指定一个默认值使得它们变得可选,这是非常有帮助的。这里有一个例子,在Activity中创建了一个函数用来toast一段信息: fun toast(message: String, length: I

  • 问题内容: 使用以下内容之间是否存在偏好或行为差异: 和 ? 问题答案: 在大多数情况下,应使用运算符测试对象是否为数组。 通常,您需要先测试对象的类型,然后再向下转换为编译时已知的特定类型。例如,也许您编写了一些可以使用或的代码。您想使用以下方法保护自己的演员: 在JVM级别,操作员将转换为特定的“实例”字节代码,该代码在大多数JVM实现中都得到了优化。 在极少数情况下,您可能会使用反射遍历未知