可变参数反射方法调用
Variable args reflection method invoke
用户将键入要调用的方法及其参数。即:
- 函数 1 参数 1
- 函数 2 参数 1 参数 2
- 函数 N 参数 1 参数 2 .. 参数 N
假设所有参数都是字符串,我将用户的所有输入保存在一个字符串栈中:
LinkedList<String> stack = new LinkedList<String>();
然后,使用反射我得到了方法:
SpreadSheet myClass = new SpreadSheet();
Class objClass = myClass.getClass();
Method meth1 = objClass.getDeclaredMethod(stack.pop());
我遗漏了使用堆栈中剩余的变量 args 调用方法的部分。有帮助吗?
objClass.getDeclaredMethod(stack.pop());
将 return 一个名为 return 的方法由 stack.pop()
编辑并且不带任何参数。
要正确使用 getDeclaredMethod(String name, Class<?>... parameterTypes)
,您需要传递方法名称和 Class 个对象的正确数量,您传递的对象是 Class 个字符串
正确的方法是:-
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());
用户将键入要调用的方法及其参数。即:
- 函数 1 参数 1
- 函数 2 参数 1 参数 2
- 函数 N 参数 1 参数 2 .. 参数 N
假设所有参数都是字符串,我将用户的所有输入保存在一个字符串栈中:
LinkedList<String> stack = new LinkedList<String>();
然后,使用反射我得到了方法:
SpreadSheet myClass = new SpreadSheet();
Class objClass = myClass.getClass();
Method meth1 = objClass.getDeclaredMethod(stack.pop());
我遗漏了使用堆栈中剩余的变量 args 调用方法的部分。有帮助吗?
objClass.getDeclaredMethod(stack.pop());
将 return 一个名为 return 的方法由 stack.pop()
编辑并且不带任何参数。
要正确使用 getDeclaredMethod(String name, Class<?>... parameterTypes)
,您需要传递方法名称和 Class 个对象的正确数量,您传递的对象是 Class 个字符串
正确的方法是:-
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());