动态方法调用
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。
据我了解,如果同时提供方法名称和参数类型列表,则可以动态调用方法(见下文)。但是,有没有一种方法可以动态调用方法 而无需 指定参数类型或提供 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。