动态方法调用

时间:2015-06-16 18:31:01

标签: java java-8 java-7

根据我的理解,如果提供了方法名称和参数类型列表,则可以动态调用方法(见下文)。但是,有没有办法动态调用方法而不用指定参数类型,或者提供无限制的泛型类类型?如果是,将不胜感激的解释/示例。感谢。

Class<?>[] paramTypes = {String.class};
Method m = original.getClass().getMethod(methodName, paramTypes);
m.invoke(original, value);

2 个答案:

答案 0 :(得分:0)

如果要根据目标,名称和可用参数类型动态查找目标方法,那么MethodHandle machinery可能会很有用。

答案 1 :(得分:0)

自bean包的Java 1.4,StatementExpression以来,有一个解决方案。对于您的调用,不评估返回值,您可以使用

new Statement(original, methodName, new Object[]{value}).execute();

由于它必须计算出比直接反射使用更多的东西,你可以预期性能甚至比直接使用反射更差。

此外,它仅限于public API。