变量参数反射方法调用



用户将键入要调用的方法及其参数。例如:

  • function1 param1
  • function2 param1 param2
  • functionN param1 param2 ..paramN

假设所有参数都是字符串,我将用户的所有输入保存在字符串堆栈中:

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());将返回一个具有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());

相关内容

  • 没有找到相关文章

最新更新