黑马程序员技术交流社区

标题: 关于Field 类中的存储方式 [打印本页]

作者: 桉树    时间: 2013-6-5 09:02
标题: 关于Field 类中的存储方式
本帖最后由 桉树 于 2013-6-5 10:13 编辑

关于Field 类对成员变量的反射之后:
  1. <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相等的。

如果楼主有不理解的可以继续提问

作者: 王艳    时间: 2013-6-15 10:52
小苑同学,你好活跃哦,可以看出来你技术不错,看你技术分每天增长速度好快,版主肯定注意到你了咧,祝你早日加入黑马哈!
作者: 苑永志    时间: 2013-6-15 12:10
王艳 发表于 2013-6-15 10:52
小苑同学,你好活跃哦,可以看出来你技术不错,看你技术分每天增长速度好快,版主肯定注意到你了咧,祝你早 ...

呵呵,谢谢了哈
作者: 桉树    时间: 2013-6-19 16:58
苑永志 发表于 2013-6-15 00:35
我想楼主的意思应该是这样的:代码 fieldY.get(point_1)通过fieldY得到point_1中的属性y的值,也可以通过fi ...

额,有一段时间没上论坛,我的意思是:Field 类中的存储方式。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2