【譯】4. Java反射——欄位

pengisgood發表於2013-09-05

原文地址:http://tutorials.jenkov.com/java-reflection/fields.html

 ========================================================================================

     使用java反射,你可以在執行時檢查類的欄位(成員變數)並且get/set它們的值。這些是通過Java類java.lang.reflect.Field做的。本文將會給出更詳細的關於Field物件的資訊。請記住也去查閱Sun的JavaDoc。下面是主題列表:

  1. Obtaining Field Objects (獲取Field物件)
  2. Field Name (欄位名)
  3. Field Type (欄位型別)
  4. 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。

 

 ========================================================================================

 

  • 目錄

 

  這是一個本教程到目前為止涵蓋的主題列表:     

 

  1. Java反射——引言
  2. Java反射——Class物件
  3. Java反射——建構函式
  4. Java反射——欄位
  5. Java反射——方法
  6. Java反射——Getter和Setter
  7. Java反射——私有欄位和私有方法
  8. Java反射——註解
  9. Java反射——泛型
  10. Java反射——陣列
  11. Java反射——動態代理
  12. Java反射——類的動態載入和重新載入

 

(敬請期待下一篇翻譯)

 

相關文章