代码之家  ›  专栏  ›  技术社区  ›  Vivek

如何使用java中的反射调用java方法而不知道参数类型

  •  0
  • Vivek  · 技术社区  · 4 年前

    我试图使用反射在java中执行这个字符串

    String methodCall = "com.mypackage.util.MathUtil.myFunction(4,\"abc\")";
    

    Class.forName("com.mypackage.util.MathUtil").getDeclaredMethod("myFunction", int.class, String.class).invoke(null, 4, "abc");
    

    上述解决方案的问题是,在调用该方法之前,我需要知道参数类型,不幸的是,我没有这些类型。

    作为解决方案,我可以使用 Class.forName("com.mypackage.util.MathUtil").getDeclaredMethods() ,迭代,匹配名称和参数计数,并使用一些逻辑手动检查类型以确定适当的方法。

    Class.forName("com.mypackage.util.MathUtil").getDeclaredMethod("myFunction").invoke(null, 4, "abc");
    

    0 回复  |  直到 4 年前
        1
  •  0
  •   Vivek    4 年前

    利用类型识别适当方法的核心问题在 BeanShell

    String methodCall = "com.mypackage.util.MathUtil.randomNumbers(4,\"abc\")";
    Interpreter i = new Interpreter();
    String result = i.eval(methodCall).toString();
    

    特别感谢@jCoder提供的解决方案。