动态方法调用

Dynamic Method Calls

据我了解,如果同时提供方法名称和参数类型列表,则可以动态调用方法(见下文)。但是,有没有一种方法可以动态调用方法 而无需 指定参数类型或提供 un/bounded 泛型 class 类型?如果是,explanations/examples 将不胜感激。谢谢

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

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

从 beans 包的 Java1.4,Statement and Expression 开始就有一个解决方案。对于您的调用,不评估 return 值,您可以使用

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

由于它比直接反射使用要弄清楚更多,因此您可以预期性能比直接使用反射更差。

此外,它仅限于 public 个 API。