根据我的理解,如果提供了方法名称和参数类型列表,则可以动态调用方法(见下文)。但是,有没有办法动态调用方法而不用指定参数类型,或者提供无限制的泛型类类型?如果是,将不胜感激的解释/示例。感谢。
Class<?>[] paramTypes = {String.class};
Method m = original.getClass().getMethod(methodName, paramTypes);
m.invoke(original, value);
答案 0 :(得分:0)
如果要根据目标,名称和可用参数类型动态查找目标方法,那么MethodHandle machinery可能会很有用。
答案 1 :(得分:0)
自bean包的Java 1.4,Statement
和Expression
以来,有一个解决方案。对于您的调用,不评估返回值,您可以使用
new Statement(original, methodName, new Object[]{value}).execute();
由于它必须计算出比直接反射使用更多的东西,你可以预期性能甚至比直接使用反射更差。
此外,它仅限于public
API。