2016-09-16 49 views
0

我希望用地圖來訪問我的方法,但我不能,如果他們有這樣的參數來訪問它們:地圖和我自己的方法

public static void cmdCheck(String cmd, Stack<String> input) throws Exception{ 

    cmd=cmd.substring(1,cmd.length()); 

    Map<String, Method> cmdMap = new HashMap<String, Method>(); 

    cmdMap.put("login", CommandDirectory.class.getMethod("subCmdCheck")); 

    if(cmdMap.containsKey(cmd)){ 
     cmdMap.get(cmd).invoke(input.pop(), input); 
    }else{ 
     System.out.println("UNKOWN COMMAND"); 
    } 
    System.out.println("Done With Cmd Check"); 
} 

public static Method subCmdCheck(String subCmd, Stack<String> input) throws Exception{ 
    if(subCmd.indexOf("-")==0){ 
     System.out.println("WORKING"); 
    }else{ 
     System.out.println("MISSING ESSENTIAL INFO, CORRECT USAGE:"); 
     System.out.println(" .login //Incomplete"); 
     System.out.println(); 
    } 
    return null; 
} 

如何訪問這些參數?

+0

你預計會發生什麼?您的方法簽名不接受任何參數 – chenchuk

+0

顯示您嘗試傳遞參數的內容,然後我們可以看到問題所在。 –

+0

如果你想傳遞參數,你可能想要聲明實際參數的方法。 – SLaks

回答

0

替換此行:

cmdMap.get(cmd).invoke(input.pop(), input); 

這一個:

cmdMap.get(cmd).invoke(null, input.pop(), input); 

第一個參數是你調用的方法的實例;如果是靜態方法,則可以通過null。 雖然您不能省略它,因爲現在第一個參數的類型是錯誤的(String而不是您的方法所在的類)並且參數數量不正確。

相關問題