用户将键入要调用的方法及其参数。即:
假设所有参数都是字符串,我将用户的所有输入保存在一串字符串中:
Row
然后,使用反射我得到了方法:
LinkedList<String> stack = new LinkedList<String>();
我错过了使用堆栈中保留的变量args调用方法的部分。有什么帮助吗?
答案 0 :(得分:1)
objClass.getDeclaredMethod(stack.pop());
将返回一个方法,该方法的名称由stack.pop()
返回,并且不带参数。
要正确使用getDeclaredMethod(String name, Class<?>... parameterTypes)
,您需要传递方法名称和正确数量的类对象,您要传递类字符串的对象
正确的方法是: -
LinkedList<String> stack = new LinkedList<String>();
SpreadSheet myClass = new SpreadSheet();
Class objClass = myClass.getClass();
String methodName = stack.pop();
Class<String>[] parameterTypes = new Class[stack.size()];
java.util.Arrays.fill(parameterTypes,String.class); // fill the array with String.class Object
Method meth1 = objClass.getDeclaredMethod(methodName, parameterTypes);
meth1.invoke(myClass, stack.toArray());