java 反射如何获得方法

java 反射如何获得方法

作者:William Gu发布时间:2026-02-06阅读时长:0 分钟阅读次数:6

用户关注问题

Q
如何通过Java反射获取一个类的方法列表?

我想使用Java反射机制获取某个类中所有定义的方法,应该如何操作?

A

使用Class对象的getMethods()和getDeclaredMethods()方法

在Java中,可以通过类的Class对象调用getMethods()方法获取该类及其父类的所有公共方法。如果需要获取包括私有方法在内的所有方法,可以使用getDeclaredMethods()方法。示例代码:

Class<?> clazz = YourClass.class;
Method[] methods = clazz.getMethods(); // 获取所有公共方法
// 或者
Method[] allMethods = clazz.getDeclaredMethods(); // 获取所有声明的方法

Q
如何利用反射调用指定名称的方法?

如果我知道方法名称和参数类型,怎么用Java反射调用该方法?

A

使用Class的getMethod()或getDeclaredMethod()并调用invoke()

通过Class对象的getMethod(String name, Class<?>... parameterTypes)方法可以获取指定名称且参数匹配的公共方法。如果方法是私有的,可以使用getDeclaredMethod()。取到方法后,通过Method对象的invoke(Object obj, Object... args)调用该方法。例如:

Method method = clazz.getMethod("methodName", String.class);
Object result = method.invoke(targetObject, "参数值");

Q
反射获取方法时如何处理方法重载情况?

当一个类中有多个同名但参数不同的方法时,如何准确地通过反射获取指定版本的方法?

A

通过完整的方法名和参数类型数组精确匹配目标方法

Java反射获取方法不仅需要方法名,还需要其参数类型数组来区分重载方法。调用getMethod()或getDeclaredMethod()时,传入方法名和对应参数类型数组,可以精确匹配目标方法。例如:

Method method = clazz.getMethod("compute", int.class, double.class);