java - 变量args反射方法调用

标签 java methods reflection invoke variadic-functions

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

  • 函数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());将返回一个方法,其名称由 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());

关于java - 变量args反射方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222402/

相关文章:

java - Querydsl - 线程 "main"java.lang.IllegalArgumentException : No sources given 中的异常

python - 打印和格式化实例

java - 从 Java 中的嵌入类调用方法

java - Point2D 比较器抛出错误

c# - 从类型名称的字符串表示形式强制转换为类型

java - 如何在不关闭连接的netty中设置读取超时?

java - 无法再次访问托管 bean...jsf

java - 更改布局的组件

ruby - 如何使用反射获取参数名称

c# - 获取泛型类型参数的数量