gpt4 book ai didi

java - 无法通过反射调用方法

转载 作者:行者123 更新时间:2023-11-30 09:23:59 25 4
gpt4 key购买 nike

以下是我的方法,我尝试在 java 中使用反射调用该方法:

@PreAuthorize("isAuthenticated() and hasPermission(#request, 'CREATE_REQUISITION')")
@RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition")
public @ResponseBody
void createRequisition(@RequestBody CreateRequisitionRO[] request,
@RequestHeader("validateOnly") boolean validateOnly) {
logger.debug("Starting createRequisition()...");
for (int i = 0; i < request.length; i++) {
CreateRequisitionRO requisitionRequest = request[i];

// FIXME this has to be removed/moved
requisitionRequest.setFundManager(requisitionRequest.getUserId());
// FIXME might have to search using param level as well
SystemDefault sysDefault = dbFuncs.references.systemDefault
.findByCompanyAndDivisionAndPortfolio(
userContext.getCompany(),
userContext.getDivision(),
requisitionRequest.getPortfolio());
requisitionRequest.setCustodianN(sysDefault.getCustodianN());

gateKeeper.route(requisitionRequest);
}
}

我创建反射的方式:

public static void main(String[] args) {
Class[] paramString = new Class[1];
paramString[0] = String.class;

//Object parameter
Class[] parames = new Class[1];
parames[0] = CreateRequisitionRO.class;

Class booleanVal ;
booleanVal = Boolean.class;


Class cls;
CreateRequisitionRO[] request = new CreateRequisitionRO[10];
try {
//load the HexgenWebAPI at runtime
cls = Class.forName("com.hexgen.api.facade.HexgenWebAPI");
Object obj = cls.newInstance();

Method method = cls.getDeclaredMethod("createRequisition", parames,booleanVal);
method.invoke(obj, request,true);


}catch(Exception ex){
ex.printStackTrace();
}

}

我得到以下异常:

The method getDeclaredMethod(String, Class...) in the type Class is not applicable for the arguments (String, Class[], Class)

在下一行

方法 method = cls.getDeclaredMethod("createRequisition", parames,booleanVal);

我理解异常,但我的方法参数是对象数组。如果我删除数组而不是我得到 NoSuchMethod Exception

如何解决?

最佳答案

您需要传递 CreateRequisitionRO 数组的类,而不是类数组:替换此

Class[] parames = new Class[1]; 
parames[0] = CreateRequisitionRO.class;

用这个:

Class parames = CreateRequisitionRO[].class;

另外,由于第二个参数是boolean,不是Boolean,所以需要替换

booleanVal = Boolean.class; // The class of the wrapper Boolean

booleanVal = Boolean.TYPE;  // The class of the primitive boolean

关于java - 无法通过反射调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15830840/

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