原文地址: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反射——類的動態加載和重新加載
(敬請期待下一篇翻譯)
