内容索引
<a href="http://ifeve.com/java-reflection-fields/#obtainfieldobject">擷取field對象</a>
<a href="http://ifeve.com/java-reflection-fields/#fieldname">變量名稱</a>
<a href="http://ifeve.com/java-reflection-fields/#fieldtype">變量類型</a>
<a href="http://ifeve.com/java-reflection-fields/#getorsetfieldval">擷取或設定(get/set)變量值</a>
使用java反射機制你可以運作期檢查一個類的變量資訊(成員變量)或者擷取或者設定變量的值。通過使用java.lang.reflect.field類就可以實作上述功能。在本節會帶你深入了解field對象的資訊。
<a></a>
可以通過class對象擷取field對象,如下例:
傳回的field對象數組包含了指定類中聲明為公有的(public)的所有變量集合。
如果你知道你要通路的變量名稱,你可以通過如下的方式擷取指定的變量:
上面的例子傳回的field類的執行個體對應的就是在myobject類中聲明的名為somefield的成員變量,就是這樣:
在調用getfield()方法時,如果根據給定的方法參數沒有找到對應的變量,那麼就會抛出nosuchfieldexception。
一旦你擷取了field執行個體,你可以通過調用field.getname()方法擷取他的變量名稱,如下例:
你可以通過調用field.gettype()方法來擷取一個變量的類型(如string, int等等)
一旦你獲得了一個field的引用,你就可以通過調用field.get()或field.set()方法,擷取或者設定變量的值,如下例:
傳入field.get()/field.set()方法的參數objetinstance應該是擁有指定變量的類的執行個體。在上述的例子中傳入的參數是myobject類的執行個體,是因為somefield是myobject類的執行個體。
如果變量是靜态變量的話(public static)那麼在調用field.get()/field.set()方法的時候傳入null做為參數而不用傳遞擁有該變量的類的執行個體。(譯者注:你如果傳入擁有該變量的類的執行個體也可以得到相同的結果)