变量args反射方法调用

时间:2015-10-19 19:32:07

标签: java methods reflection invoke variadic-functions

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

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

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

Row

然后,使用反射我得到了方法:

LinkedList<String> stack = new LinkedList<String>();

我错过了使用堆栈中保留的变量args调用方法的部分。有什么帮助吗?

1 个答案:

答案 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());