使用反射可以檢視類屬性(成員變數),並且可以在執行時get/set。這些是通過類java.lang.reflect.Field
實現的。本文將詳細介紹javaField
物件。別忘了參考Sun的JavaDoc
。
獲得屬性物件
Field
類是通過Class
物件獲得的。示例如下:
Class aClass = ...//obtain class object
Field[] fields = aClass.getFields();
Field[]
陣列包含類定義所有公共(public)屬性例項。
如果你知道想訪問的屬性名稱,可以使用下方程式碼:
Class aClass = MyObject.class
Field field = aClass.getField("someField");
上訴示例將返回類MyObject
定義的someField
屬性對應的Field
例項,類似如下程式碼:
public class MyObject{
public String someField = null;
}
如果給予getField()方法的引數不存在對應的屬性,將丟擲NoSuchFieldException
。
屬性名稱
如已有Field
例項,可以通過Field.getName()
方法獲取屬性名稱,程式碼如下 :
Field field = ... //obtain field object
String fieldName = field.getName();
屬性型別
可以使用Field.getType()
方法獲取屬性型別:
Field field = aClass.getField("someField");
Object fieldType = field.getType();
獲取、設定屬性值
一旦獲得Field
引用,可以使用Field.get()
和Field.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
方法的objetInstance
必須是擁有指定屬性的一個類的例項。上例使用的是MyObject
的例項,因為someField
是類MyObject
的一個變數。
如屬性是靜態屬性(public static),應傳null
給get
、set
方法,以替代例子中的objectInstance
引數。