今天确实也没什么事,写一个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 ... 参数);
这样执行的是实例对象的方法
如果只传一个可变参数的话,执行的就是类方法..
本文介绍了一个使用Java反射机制的具体案例,展示了如何通过反射调用类的私有方法。通过实例对象获取类信息,并利用反射机制执行指定方法。
1万+

被折叠的 条评论
为什么被折叠?



