A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 桉树 中级黑马   /  2013-6-5 09:02  /  1506 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 桉树 于 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 。
   不知道我这样理解可以么?求大神分析一下

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
代码太不规范了   改一改
回复 使用道具 举报
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代码
回复 使用道具 举报
我想楼主的意思应该是这样的:代码 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相等的。

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

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
小苑同学,你好活跃哦,可以看出来你技术不错,看你技术分每天增长速度好快,版主肯定注意到你了咧,祝你早日加入黑马哈!
回复 使用道具 举报
王艳 发表于 2013-6-15 10:52
小苑同学,你好活跃哦,可以看出来你技术不错,看你技术分每天增长速度好快,版主肯定注意到你了咧,祝你早 ...

呵呵,谢谢了哈
回复 使用道具 举报
桉树 中级黑马 2013-6-19 16:58:00
7#
苑永志 发表于 2013-6-15 00:35
我想楼主的意思应该是这样的:代码 fieldY.get(point_1)通过fieldY得到point_1中的属性y的值,也可以通过fi ...

额,有一段时间没上论坛,我的意思是:Field 类中的存储方式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马