今天确实也没什么事,写一个case测试代码,想到以前还学过反射这个东西
CreditDataApplyResolveMonitor resolveMonitor = new CreditDataApplyResolveMonitor();
try {
Class [] objects = new Class[1];
objects[0]=String.class;
Method method = resolveMonitor.getClass().getDeclaredMethod("doResolve",objects);
method.setAccessible(true);
try {
Object o = method.invoke(resolveMonitor,id);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
通过实例对象 getClass(),获得类型clazz
再通过clazz 的 getDeclaredMethod()方法获得Method对象
getDeclaredMethod有两个参数 ,第一个是想要执行的方法名, 第二个是Class[] 这个方法参数类型集合
与getMethod不同, 前者可以得到private方法
可以说得到Method并不一定能invoke
需要爆破一下..
method.setAccessible(true);
然后method.invoke(实例对象,Object ... 参数);
这样执行的是实例对象的方法
如果只传一个可变参数的话,执行的就是类方法..