原文地址:http://tutorials.jenkov.com/java-reflection/fields.html
========================================================================================
使用java反射,你可以在執行時檢查類的欄位(成員變數)並且get/set它們的值。這些是通過Java類java.lang.reflect.Field做的。本文將會給出更詳細的關於Field物件的資訊。請記住也去查閱Sun的JavaDoc。下面是主題列表:
- Obtaining Field Objects (獲取Field物件)
- Field Name (欄位名)
- Field Type (欄位型別)
- Getting and Setting Field Values (get/set欄位的值)
========================================================================================
- Obtaining Field Objects
從Class物件中獲取Field物件。這裡有一個例子:
Class aClass = ...//obtain class object Field[] methods = aClass.getFields();
陣列Field[ ]將會儲存在類中宣告的所有為public的欄位的Field物件。
如果你知道你想要訪問的欄位的欄位名,你可以像這樣來訪問它:
Class aClass = MyObject.class Field field = aClass.getField("someField");
上面的例子將會返回Field例項,和下面MyObject宣告的欄位someField對應:
public class MyObject{ public String someField = null; }
如果不存在和方法getField( )接受的引數一致的欄位,會丟擲NoSuchFieldException異常。
========================================================================================
- Field Name
一旦你獲取了一個Field例項,你可以像這樣通過Field.getName()方法取得欄位名:
Field field = ... //obtain field object String fieldName = field.getName();
========================================================================================
- Field Type
你可以通過Field.getType() 方法取得欄位型別(String, int etc.) :
Field field = aClass.getField("someField");
Object fieldType = field.getType();
========================================================================================
- Getting and Setting Field Values
一旦你獲取了Field物件的引用,你可以像這樣通過Field.get()方法和Field.set()方法get/set欄位的值:
Class aClass = MyObject.class Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);
field.set(objetInstance, value);
傳給get和set方法的引數objectInstance必須是擁有該欄位的例項。在上面的例子中,用了一個MyObject的例項,因為someField是類MyObject的成員例項。
如果欄位是靜態欄位(public static …),則傳null作為get和set方法的引數,而不是上面傳的objectInstance。
========================================================================================
- 目錄
這是一個本教程到目前為止涵蓋的主題列表:
- Java反射——引言
- Java反射——Class物件
- Java反射——建構函式
- Java反射——欄位
- Java反射——方法
- Java反射——Getter和Setter
- Java反射——私有欄位和私有方法
- Java反射——註解
- Java反射——泛型
- Java反射——陣列
- Java反射——動態代理
- Java反射——類的動態載入和重新載入
(敬請期待下一篇翻譯)