Java Reflection(四):變數

來源:互聯網
上載者:User

標籤:

轉載自並發編程網 – ifeve.com

內容索引
擷取Field對象
變數名稱
變數類型
擷取或設定(get/set)變數值

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

 

擷取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。

變數名稱

一旦你擷取了Field執行個體,你可以通過調用Field.getName()方法擷取他的變數名稱,如下例:

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

 變數類型

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

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

擷取或設定(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做為參數而不用傳遞擁有該變數的類的執行個體。(譯者註:你如果傳入擁有該變數的類的執行個體也可以得到相同的結果)

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

Java Reflection(四):變數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.