【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