<div>public class ReflectPoint {</div><div> private int x ;</div><div> public int y ;</div><div> public ReflectPoint(int x, int y) {</div><div> super();</div><div> this.x = x;</div><div> this.y = y;</div><div> }</div><div> </div><div> public static void ReflectText() throws Exception{ </div><div> ReflectPoint point_1 = new ReflectPoint(3,4);</div><div> ReflectPoint point_2 = new ReflectPoint(5,10);</div><div> Field fieldY = point_1.getClass().getField("y") ;</div><div> System.out.println(fieldY.get(point_2)); </div><div> }</div><div> public static void main(String[] args) throws Exception {</div><div> ReflectText() ;</div><div> } </div><div> }</div>
复制代码
虽然是 通过 point_1得到了 fieldY ,但是同样可以取到point_2 中的 y ,
开始我的理解是 Field 类的 存储方式是一个Map集合:对象:对应属性值,如 point_1:4 , point_2:10 。
不知道我这样理解可以么?求大神分析一下 作者: 袁梦希 时间: 2013-6-5 11:44
代码太不规范了 改一改作者: 桉树 时间: 2013-6-5 14:18
public class ReflectPoint {
private int x ;
public int y ;
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public static void ReflectText() throws Exception{
ReflectPoint point_1 = new ReflectPoint(3,4);
ReflectPoint point_2 = new ReflectPoint(5,10);
Field fieldY = point_1.getClass().getField("y") ;
System.out.println(fieldY.get(point_2));
}
public static void main(String[] args) throws Exception {
ReflectText() ;
}
}
不知道为什么发的代码有HTML代码 作者: 苑永志 时间: 2013-6-15 00:35
我想楼主的意思应该是这样的:代码 fieldY.get(point_1)通过fieldY得到point_1中的属性y的值,也可以通过fieldY得到point_1的属性y的值;但是filedY我是通过point_1得到的呀,怎么都可以用呢?
如果楼主是这个意思,说明对反射机制理解还不够深刻,
实际上ReflectPoint.class,point_1.getClass()和point_2.getClass()得到是同一个Class实例,即ReflectPoint类对应的Class实例(内存中的字节码)。由此推之,ReflectPoint每个实例对象中属性对应的Filed实例也只有一个,或者用代码可表示成如下:
Field fieldY1 = point_1.getClass().getField("y") ;
Field fieldY2 = point_2.getClass().getField("y") ;
Field fieldY3 = point_1.getClass().getField("y") ;
得到的fieldY1,fieldY2,fieldY3相等的。