簡體   English   中英

具有動態數量參數的Java調用方法dnamicall

[英]java call method dnamicall with a dynamic number of parameters

我在看這個問題

當給定方法名稱為字符串時,如何調用Java方法?

並運用拳頭的回答

這是我的代碼,用於動態調用方法,其參數是字符串數組

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實例。 而且您正在嘗試傳遞一個StringString數組

通過文檔

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM