Java 通过反射Api访问重载方法
如何使用反射来区分类重载方法,例如:Java 通过反射Api访问重载方法,java,reflection,Java,Reflection,如何使用反射来区分类重载方法,例如: method()和method(int-arg) 并调用此函数: getV(new Object(), "method", 33); 它返回errorjava.lang.IllegalArgumentException:arguments的数目错误,这意味着默认情况下会选择不带参数的方法。如果我在不使用int参数的情况下调用该方法,它将工作。我问如何区分重载方法的?我已经阅读了类的文档。getDeclaredMethod也有一篇关于SO的旧帖子,但两个来源
method()
和method(int-arg)
并调用此函数:
getV(new Object(), "method", 33);
它返回errorjava.lang.IllegalArgumentException:arguments的数目错误,这意味着默认情况下会选择不带参数的方法。如果我在不使用int参数的情况下调用该方法,它将工作。我问如何区分重载方法的?我已经阅读了类的文档。getDeclaredMethod
也有一篇关于SO的旧帖子,但两个来源都没有回答相同的问题
. 当然,Class.Object没有名为method的方法,我只是将其用作示例。您必须为查找方法指定参数类型,而不是invoke方法:
void invoke(Object object, String methodName, int id) throws ReflectiveOperationException {
object.getClass().getDeclaredMethod(methodName, int.class).invoke(object, id);
}
但是请记住,getClass()
返回实际的类,它可能是预期类的子类,而getDeclaredMethod
不搜索超类getMethod
搜索超类,但只考虑public
方法
在类型层次结构中考虑非公共方法时,当未找到方法时,您必须自己循环遍历超类。
@霍格尔,您没有看到In类吗?我选择了一个参数的方法。@Holger我得到了:)谢谢!
void invoke(Object object, String methodName, int id) throws ReflectiveOperationException {
object.getClass().getDeclaredMethod(methodName, int.class).invoke(object, id);
}