Java反射-屬性

團結發表於2019-01-19

使用反射可以檢視類屬性(成員變數),並且可以在執行時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);

傳給getset方法的objetInstance必須是擁有指定屬性的一個類的例項。上例使用的是MyObject的例項,因為someField是類MyObject的一個變數。
如屬性是靜態屬性(public static),應傳nullgetset方法,以替代例子中的objectInstance引數。

相關文章