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);
它返回error
java.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);
}