Java Reflection(四):變量

原文地址 作者: Jakob Jenkov 譯者:葉文海([email protected]

使用Java反射機制你可以運行期檢查一個類的變量信息(成員變量)或者獲取或者設置變量的值。通過使用java.lang.reflect.Field類就可以實現上述功能。在本節會帶你深入瞭解Field對象的信息。

1. 獲取Field對象

可以通過Class對象獲取Field對象,如下例:

  Class aClass = ...//獲取Class對象
  Field[] methods = aClass.getFields();

返回的Field對象數組包含了指定類中聲明爲公有的(public)的所有變量集合。
如果你知道你要訪問的變量名稱,你可以通過如下的方式獲取指定的變量:

  Class  aClass = MyObject.class
  Field field = aClass.getField("someField");

上面的例子返回的Field類的實例對應的就是在MyObject類中聲明的名爲someField的成員變量,就是這樣:

  public class MyObject{
    public String someField = null;
  }

在調用getField()方法時,如果根據給定的方法參數沒有找到對應的變量,那麼就會拋出NoSuchFieldException。

2. 變量名稱

一旦你獲取了Field實例,你可以通過調用Field.getName()方法獲取他的變量名稱,如下例:

  Field field = ... //獲取Field對象
  String fieldName = field.getName();

3. 變量類型

你可以通過調用Field.getType()方法來獲取一個變量的類型(如String, int等等)

  Field field = aClass.getField("someField");
  Object fieldType = field.getType();

4. 獲取或設置(get/set)變量值

一旦你獲得了一個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);

傳入Field.get()/Field.set()方法的參數objetInstance應該是擁有指定變量的類的實例。在上述的例子中傳入的參數是MyObject類的實例,是因爲someField是MyObject類的實例。
如果變量是靜態變量的話(public static)那麼在調用Field.get()/Field.set()方法的時候傳入null做爲參數而不用傳遞擁有該變量的類的實例。(譯者注:你如果傳入擁有該變量的類的實例也可以得到相同的結果)

原創文章,轉載請註明: 轉載自併發編程網 – ifeve.com

本文鏈接地址: Java Reflection(四):變量http://ifeve.com/java-reflection-fields/

發佈了46 篇原創文章 · 獲贊 6 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章