public class Item{
public String TypeName(){
returen "A";
}
...
}
假设我们要测试返回值是否为“A”。
- 首先NEW一个Item对象出来:
Item item= new Item();
- NEW一个通用类型变量,临时装载item对象.
Class<?> clazz= item.getClass();
其实就是复制item副本的过程, NEW一个反射对象Field,参数指向clazz声明的方法名“TypeName”,表示这个Field只存储TypeName方法相关的参数!:
Field field = clazz.getDeclaredField("TypeName");
反射机制访问权限相关设定,必须这么写
field.setAccessible(true);
由于我的Field限制为TypeName属性范围,所以,Field.get(object)方法中,传入的 object 如果具有TypeName方法,它的值将被保存。我们传入item, 得到的将是item的TypeName方法,这个方法是有返回值的,所以我们用String参数接收这个返回值
。String string = (String)field.get(item);
既然 我们已经拿到了TypeName的返回值 ,与我们希望得到的结果做个比较,就能知道它们是否equlse了。
assertEquals("A",string);
- 就这样就可以通过一个对象的影子映射到了这个对象的所有信息了。这就是反射机制。