getConstructor()。getInstance(parameter):java.lang.IllegalArgumentException:参数个数错误

时间:2014-05-11 22:54:31

标签: java class constructor

我可以'使用我的构造函数添加参数

我的代码:

import inteToM.CreateFileAction;   // said not use import
import dto.m.CreateFile;
//...
// code
Class<?> dtoClass = Class.forName("dto.mToInte.CreateFile");
DtoM dto = (DtoM) JAXB.unmarshal(sr, dtoClass );
Class<?> actionClass = Class.forName("inteToM.CreateFileAction");

Constructor<?> actionConstruct = actionClass.getConstructor(); //dto.getClass()

ActionM aAction = (ActionIM) actionConstruct.newInstance(dto); // not working
ActionM bAction = (ActionIM) actionConstruct.newInstance();  // work 

我的班级:

public class CreateFileAction {

import dto.mToInte.CreateFile;
public CreateFileAction () {
        System.out.println(" constructor null");
    }

    public CreateFileAction (CreateFile file) {
        System.out.println(" constructor not null");
        this.file_c= file;
    }
}

我的错误:java.lang.IllegalArgumentException:错误的参数数量 所以我不明白为什么我不能用我的构造函数添加参数。

编辑: 如果我这样做:

Constructor<?> actionConstruct = actionClass.getConstructor(CreateFileAction.class);

我有这个错误:

java.lang.NoSuchMethodException: inteToM.CreateFileAction.<init>(inteToM.CreateFileAction)

如果我这样做:

Constructor<?> actionConstruct = actionClass.getConstructor(CreateFile.class);

我有这个:

java.lang.NoSuchMethodException: inteToM.CreateFileAction.<init>(dto.m.CreateFile)

我修改了dtoClass,但我有相同的概率。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

你要求构造函数没有参数,然后尝试用参数调用它。您需要请求具有参数的构造函数。

Constructor<?> theOtherConstructor = actionClass.getConstructor(CreateFile.class);
CreateFileAction created = theOtherConstructor.newInstance(dto);

修改

当我第一次发布此内容时,dto似乎是CreateFile。现在你已经改变了问题。所以无论类dto是什么,当你得到构造函数时,你需要传入它,并且它需要匹配构造函数参数的类型。

其他编辑

在下面的讨论之后,很明显你有两个不同的类叫CreateFile

  • 构造函数期望dto.mToInte.CreateFile,因为这是在定义该构造函数的java文件中导入的那个。
  • 您实际上是将dto.m.CreateFile传递给构造函数,因为那是在您调用构造函数的java文件中导入的那个。

因为这两个类不同,所以第二个类的对象不能使用类型为第一个类的参数传递给构造函数。

答案 1 :(得分:0)

您应该传递CreateFile的实例作为参数。