[英]java call method dnamicall with a dynamic number of parameters
我在看這個問題
並運用拳頭的回答
這是我的代碼,用於動態調用方法,其參數是字符串數組
java.lang.reflect.Method method;
try {
String [] requiredParameters = testService.getRequiredParameters();
String [] parameters = new String[requiredParameters.length];
for (int i = 0; i<requiredParameters.length ; i++){
String valueRequiredParameter = request.getParameter(requiredParameters[i]);
parameters[i] = valueRequiredParameter;
}
method = new TestRecommendations().getClass().getMethod(service, parameters);
} catch (SecurityException e) {
// exception handling omitted for brevity
} catch (NoSuchMethodException e) {
// exception handling omitted for brevity
}
我在getMethod
狀態下得到編譯器錯誤:
The method getMethod(String, Class<?>...) in the type Class<capture#1-of ? extends TestRecommendations> is not applicable for the arguments (String, String[])
這是我想動態調用的方法類型
public ResultSet level0ForUser(String ... userURI) {
您傳遞的參數類型錯誤。 您的getMethod
調用接受一個String
實例和多個Class
實例。 而且您正在嘗試傳遞一個String
和String
數組
通過文檔 :
getMethod(String name, Class<?>... parameterTypes)
返回一個Method對象,該對象反映此Class對象表示的類或接口的指定公共成員方法。 name參數是一個String,它指定所需方法的簡單名稱。 parameterTypes參數是Class對象的數組,這些Class對象按聲明的順序標識方法的形式參數類型。 如果parameterTypes為null,則將其視為空數組。
因此您需要傳遞由所需方法的所有參數類型組成的Class
var arg。 對於您的方法,您應該編寫如下內容:
Method m = TestRecommendations.class.getMethod("service", String[].class);
用以下方法獲取方法:
Method m = TestRecommendations.class.getMethod("level0ForUser", String[].class);
並像這樣調用:
m.invoke(new TestRecommendations(), new Object[] { new String[]{ "A", "B", "C" } } );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.