gpt4 book ai didi

java - 使用反射创建对象的实例,当构造函数将字符串数组作为参数时

转载 作者:行者123 更新时间:2023-11-30 08:20:52 24 4
gpt4 key购买 nike

我正在尝试创建一个只有以下构造函数的类的实例,覆盖默认构造函数

public HelloWorld(String[] args)

我正在做以下事情

Class reflect;
HelloWorld obj = null;
//some logic to generate the class name with full path
reflect = Class.forName(class_name);

然后我尝试为这个类创建一个对象

 obj = (HelloWorld)reflect.getConstructor(String[].class)
.newInstance(job1.arg_arr());

arg_arr() 用于将列表转换为字符串数组

public String[] arg_arr(){
String arg_list[]=new String[args.size()];
return args.toArray(arg_list);
}

我在尝试创建实例时得到以下堆栈跟踪java.lang.IllegalArgumentException:

wrong number of arguments

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at processmigration.Process_manager.eval(Process_manager.java:175)
at processmigration.Process_manager.run(Process_manager.java:147)
at java.lang.Thread.run(Thread.java:745)

我想知道出了什么问题,因为我只向 newInstance() 传递了一个参数,就像我要创建的类的构造函数一样。

最佳答案

newInstance 采用 Object... 参数,因此当您给它一个 String[] 时,它会将其作为 Object[] 传递。

你想要的是下面的内容,告诉它你只传递一个参数,而不是数组的内容作为参数。

.newInstance((Object) job1.arg_arr())

关于java - 使用反射创建对象的实例,当构造函数将字符串数组作为参数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com