posts - 262,  comments - 221,  trackbacks - 0
【1】Filed类简介
Java反射技术的基本应用之一就是在运行时动态地访问、修改变量的值。要动态地访问、修改变量,首先要取得变量本身。步骤如下:
  1.获取Class对象
  2.调用Class对象的getField(String)方法获取指定的变量
 
在获得Filed对象之后,就可以在运行时动态地操纵变量了。Filed类里面最主要的方法有两种:
  1.获取变量方法:可以使用get(object)或getInt(Object)之类的方法
  2.设置变量方法:可以使用set(object, object)或setInt(Object,int)之类的方法
 
这里我们要特别注意的set方法,它的方法签名是:void set(Object obj, Object value)。注意它的第二个参数是Object类型的,也就是说假如方法的参数类型是原子类型的,在调用之前必须先转换成对应的封装类。比如:int->Integer。在JDK内部会自动将其解压成原子类型。
 
从JDK1.5版本开始,增加了"自动装箱"和"自动开箱"的功能,所以我们看到下面的例子中为变量xf和yf赋值的语句,使用的不是封装类型,而是元素类型数据。(见行43、48),在JDK1.4版本中这样是不被允许的。建议不要这样做以避免出现类型安全的问题。

【2】示例代码
public static void main(String args[]) throws NoSuchFieldException,
            IllegalAccessException {

        
// 创建对象
        RefFiled obj = new RefFiled();

        
// 获取类的成员变量
        Class<?> c = RefFiled.class;
        Field xf 
= c.getField("x");
        Field yf 
= c.getField("y");

        
// 变更成员x值,注意第二个参数会被自动包装成封装类型
        System.out.println("变更前x=" + xf.get(obj));
        xf.set(obj, 1.1);

        System.out.println(
"变更后x=" + xf.get(obj));

        
// 变更成员y值,注意第二个参数会被自动包装成封装类型
        System.out.println("变更前y=" + yf.get(obj));
        yf.set(obj, 2.1);

        System.out.println(
"变更后y=" + yf.get(obj));
    }


-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2008-09-04 15:02 Paul Lin 阅读(401) 评论(0)  编辑  收藏 所属分类: J2SE

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(21)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜