关于Java反射的一些事
来源:互联网 发布:java数组与集合的区别 编辑:程序博客网 时间:2024/06/16 21:41
一个类中,private的属性或方法,如何对这些属性进行读写操作或方法进行调用呢,答案就是反射。
最近在写单元测试用例时,发现通过反射来测试一些private的方法或设置private的属性非常实用。
先看定义一个类,其中有一个private的属性和一个private的方法,并且构造函数也是一个private
public class Context {private String name;private Context(){}private void process(String name, List<Integer> dataList){// doSomeThing}}
当然,实际情况不会有这样的对象,这里只是为了演示用。接下来,首先要构造这个对象,如果有public的构造函数,我们知道可以这样写:
Class.forName("packageName.className").newInstance();
或者
ClassLoader cl = Thread.currentThread().getContextClassLoader();cl.loadClass("packageName.className").newInstance();
以上构造方法默认调用public的无参构造函数,如果构造函数是private的呢?那么可以这样写:
ClassLoader cl = Thread.currentThread().getContextClassLoader();Class<?> clazz = cl.loadClass("packageName.className");Constructor<?> c = clazz.getDeclaredConstructor();// set accessiblec.setAccessible(true);Context obj = (Context) c.newInstance(new Object[]{});
获取私有域的方法:
Field field = obj.getClass().getDeclaredField("name");// set accessiblefield.setAccessible(true);// set valuefield.set(obj, "kkk");// 也可以获取所有的域Field[] fields = obj.getClass().getDeclaredFields();
获取私有方法并执行:
Method method = obj.getClass().getDeclaredMethod("process", new Class<?>[]{String.class, List.class});// set accessiblemethod.setAccessible(true);// invokemethod.invoke(obj, new Object[]{"kkk", new ArrayList()});// 也可以获取所有的方法Method[] methods = obj.getClass().getDeclaredMethods();
上面用到了Class、Constructor、Field、Method这几个反射相关的类。
还有很多好用的方法,在JDK的API文档中有详细的解释
- 关于Java反射的一些事
- 关于java反射的一些理解
- Java特性关于反射的一些技术
- 关于java反射的一些小栗子
- Java关于 反射 的一些整理
- Java基础知识 十七 (关于反射一些方法的总结)
- 关于java反射机制的一些基本操作
- 关于反射的一些知识
- 关于反射的一些程序
- 关于反射的一些内容
- 关于反射的一些姿势
- 关于反射的一些日记
- 关于反射的一些理解
- 关于Java的反射
- java反射的一些方法
- java反射的一些调试
- JAVA反射的一些例子
- java反射的一些调试
- 纯JSP+DWR实现三级联动下拉选择菜单
- Filling the Web page with a splitter
- 使用openprocess时解决问题,关于权限分配有感
- NGUI自定义图集和自定义字体
- C++中char与wchar_t符号问题
- 关于Java反射的一些事
- WindowsMediaPlayer控件的使用
- Ecshop后台对ecshop官网的调用api.ecshop.com调用 api调用
- 找师傅
- 删除oracle数据库
- GTK+, QT,wxWidgets, MFC的比较
- ecshop后台实现用ajax动态修改/更新用户评论的时间
- 生成器模式
- Servlet操作Cookie说明