
java 反射如何获得方法
用户关注问题
我想使用Java反射机制获取某个类中所有定义的方法,应该如何操作?
使用Class对象的getMethods()和getDeclaredMethods()方法
在Java中,可以通过类的Class对象调用getMethods()方法获取该类及其父类的所有公共方法。如果需要获取包括私有方法在内的所有方法,可以使用getDeclaredMethods()方法。示例代码:
Class<?> clazz = YourClass.class;
Method[] methods = clazz.getMethods(); // 获取所有公共方法
// 或者
Method[] allMethods = clazz.getDeclaredMethods(); // 获取所有声明的方法
如果我知道方法名称和参数类型,怎么用Java反射调用该方法?
使用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, "参数值");
当一个类中有多个同名但参数不同的方法时,如何准确地通过反射获取指定版本的方法?
通过完整的方法名和参数类型数组精确匹配目标方法
Java反射获取方法不仅需要方法名,还需要其参数类型数组来区分重载方法。调用getMethod()或getDeclaredMethod()时,传入方法名和对应参数类型数组,可以精确匹配目标方法。例如:
Method method = clazz.getMethod("compute", int.class, double.class);