除访问私有变量,我们也可以通过这个方法访问私有方法。
清单 4. 利用反射机制访问类的成员方法
public static Method getMethod(Object instance, String methodName, Class[] classTypes) throws NoSuchMethodException { Method accessMethod = getMethod(instance.getClass(), methodName, classTypes); //参数值为true,禁用访问控制检查 accessMethod.setAccessible(true); return accessMethod; }private static Method getMethod(Class thisClass, String methodName, Class[] classTypes) throws NoSuchMethodException { if (thisClass == null) { throw new NoSuchMethodException("Error method !"); } try { return thisClass.getDeclaredMethod(methodName, classTypes); } catch (NoSuchMethodException e) { return getMethod(thisClass.getSuperclass(), methodName, classTypes); }}
获得私有方法的原理与获得私有变量的方法相同。当我们得到了函数后,需要对它进行调用,这时我们需要通过 invoke() 方法来执行对该函数的调用,代码示例如下:
//调用含单个参数的方法public static Object invokeMethod(Object instance, String methodName, Object