没有抛出这样的方法异常?

时间:2014-03-05 13:40:56

标签: java exception reflection

我面临的问题是当我尝试传递一个值为java.util.ArrayList的项时,传递值为“add”的args [2]和值为Integer的Method Parameter会抛出NoSuchMethodException?在这方面的任何帮助非常感谢。 堆栈跟踪:

java.lang.NoSuchMethodException: java.util.ArrayList.add(java.lang.Integer)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at com.acp.assignments.jcp.JCP.CallMethod(JCP.java:65)
at com.acp.assignments.jcp.JCP.InteractiveMode(JCP.java:129)
at com.acp.assignments.jcp.JCP.BatchOrInterActive(JCP.java:47)
at com.acp.assignments.jcp.Main.main(Main.java:29)

public void CallMethod(String[] args) throws Exception {
    HashMap<String, Object> temp=VariableslistHashMap;
    if(args[0].contains("call")) {
        for(Map.Entry<String, Object> item:temp.entrySet()) {
            for(Map.Entry<String, Object> MethodParameter:temp.entrySet()) {
                if(item.getKey().contains(args[1]) && MethodParameter.getKey().contains(args[3])) {
                    Method method=item.getValue().getClass().getDeclaredMethod(args[2],MethodParameter.getValue().getClass());
                    Object result=(Object) method.invoke(item.getClass(), MethodParameter.getValue());
                    System.out.println(result);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试使用Object作为键。可能整数是类型参数,它被删除..

public static void main(String[] args) throws NoSuchMethodException, SecurityException {

    ArrayList<Integer> i = new ArrayList<>();
    i.getClass().getDeclaredMethod("add", new Class[] { Object.class } );  // Works
    i.getClass().getDeclaredMethod("add", new Class[] { Integer.class } ); // Fails
}