2016-09-16 73 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而不是您的方法所在的类)并且参数数量不正确。

相关问题