【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 閱讀(405)
評論(0) 編輯 收藏 所屬分類:
J2SE