除了Field外,还有Method ,其提供对反射类中方法的各种操作:
需要弄清楚 getMethods()和getDeclaredMethods()获取类中方法的使用区别:
getMethods():获取该类中的public方法,包括从父类中继承的public方法。仅限public修饰的方法。【此处要时刻记住从Object超父类中继承的公有public方法】
getDeclaredMethods():获取该类中的所有方法,包括public,protected,private,【默认】修饰的所有方法。但是不包括父类的任何方法。
在这里要详细讲解一下Method中invoke方法的运用。
1. 执行某对象的方法(是否含参数都适用)
public Object invokeMethod(Object classObj, String methodName, Object[] params) throws Exception {
Class clazz = classObj.getClass();
Class[] argsClass = new Class[params.length];
//封装参数类型作为getMethod第二个参数
for (int i = 0; i < params.length; i++) {
argsClass[i] = params[i].getClass();
}
// 根据方法名和参数类型获取到相应的方法
Method method = clazz.getMethod(methodName, argsClass);
//执行该methodName方法
return method.invoke(classObj, params);
}
2.执行某对象的静态方法
public Object invokeMethod(Object classObj, String methodName, Object[] params) throws Exception {
Class clazz = classObj.getClass();
Class[] argsClass = new Class[params.length];
//封装参数类型作为getMethod第二个参数
for (int i = 0; i < params.length; i++) {
argsClass[i] = params[i].getClass();
}
// 根据方法名和参数类型获取到相应的方法
Method method = clazz.getMethod(methodName, argsClass);
//执行静态方法【methodName】方法
return method.invoke(null, params);
}