2014-05-12 83 views
2

我有我的構造有問題,我不能用我的構造函數中添加參數概率與getConstructor(參數):java.lang.NoSuchMethodException:

我的代碼:

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 

我的課:CreateFichierAction

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

error : java.lang.NoSuchMethodException: 所以我不明白爲什麼我不能添加參數與我的構造函數。

我有一個概率與方法:getContructor(); 如果我有這樣的:

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

我有這樣的錯誤:

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

如果我有這樣的:

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

我有這樣的:

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

感謝幫幫我。

+0

爲什麼不使用真正的'.class'得到'Class'對象?如果你真的知道你想反映哪個類,那麼你不需要'forName'。 –

+0

我試試這個:ActionM aAction =(ActionIM)actionConstruct.newInstance(CreateFile.class); //不起作用 - 我有同樣的錯誤。 – Hann

+0

我的意思是你應該用'CreateFile.class'而不是'forName'來獲得'actionClass'。 –

回答

1

試試看看這個代碼。 主類

package com.sree; 

import java.lang.reflect.Constructor; 
import java.lang.reflect.InvocationTargetException; 

import com.sree.test.CreateFile; 

public class Test { 
    public static void main(String[] args) throws SecurityException, 
      NoSuchMethodException, IllegalArgumentException, 
      InstantiationException, IllegalAccessException, 
      InvocationTargetException { 
     Constructor<CreateFileAction> action = CreateFileAction.class 
       .getConstructor(CreateFile.class); 
     CreateFile file = new CreateFile(); 
     System.out.println(action.newInstance(file)); 
     // System.out.println(action); 
    } 
} 

你的依賴類

package com.sree; 

import com.sree.test.CreateFile; 

public class CreateFileAction { 

    private CreateFile file_c; 

    public CreateFileAction() { 
     System.out.println(" constructor null"); 
    } 

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

package com.sree.test; 

public class CreateFile { 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 
+0

哦,thx這麼多工作,感謝您的幫助。 – Hann