我面临的问题是当我尝试传递一个值为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);
}
}
}
}
}
答案 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
}