鍍金池/ 教程/ Java/ Java 變量
Java 數(shù)組
Java 訪(fǎng)問(wèn)器
Java 泛型
Java 方法
指南
Java 動(dòng)態(tài)代理
Java 變量
Java 注解
Java 私有變量和私有方法
Java 動(dòng)態(tài)類(lèi)加載與重載
java 類(lèi)
Java 構(gòu)造器

Java 變量

原文地址

作者: Jakob Jenkov 譯者:葉文海(yewenhai@gamil.com)

內(nèi)容索引

  1. 獲取 Field 對(duì)象
  2. 變量名稱(chēng)
  3. 變量類(lèi)型
  4. 獲取或設(shè)置(get/set)變量值

使用 Java 反射機(jī)制你可以運(yùn)行期檢查一個(gè)類(lèi)的變量信息(成員變量)或者獲取或者設(shè)置變量的值。通過(guò)使用 java.lang.reflect.Field 類(lèi)就可以實(shí)現(xiàn)上述功能。在本節(jié)會(huì)帶你深入了解 Field 對(duì)象的信息。

獲取 Field 對(duì)象

可以通過(guò) Class 對(duì)象獲取 Field 對(duì)象,如下例:

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

返回的 Field 對(duì)象數(shù)組包含了指定類(lèi)中聲明為公有的(public)的所有變量集合。 如果你知道你要訪(fǎng)問(wèn)的變量名稱(chēng),你可以通過(guò)如下的方式獲取指定的變量:

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

上面的例子返回的Field類(lèi)的實(shí)例對(duì)應(yīng)的就是在 MyObject 類(lèi)中聲明的名為 someField 的成員變量,就是這樣:

public class MyObject{
  public String someField = null;
}

在調(diào)用 getField()方法時(shí),如果根據(jù)給定的方法參數(shù)沒(méi)有找到對(duì)應(yīng)的變量,那么就會(huì)拋出 NoSuchFieldException。

變量名稱(chēng)

一旦你獲取了 Field 實(shí)例,你可以通過(guò)調(diào)用 Field.getName()方法獲取他的變量名稱(chēng),如下例:

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

變量類(lèi)型

你可以通過(guò)調(diào)用 Field.getType()方法來(lái)獲取一個(gè)變量的類(lèi)型(如 String, int 等等)

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

獲取或設(shè)置(get/set)變量值

一旦你獲得了一個(gè) Field 的引用,你就可以通過(guò)調(diào)用 Field.get()或 Field.set()方法,獲取或者設(shè)置變量的值,如下例:

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()方法的參數(shù) objetInstance 應(yīng)該是擁有指定變量的類(lèi)的實(shí)例。在上述的例子中傳入的參數(shù)是 MyObjec t類(lèi)的實(shí)例,是因?yàn)?someField 是 MyObject 類(lèi)的實(shí)例。 如果變量是靜態(tài)變量的話(huà)(public static)那么在調(diào)用 Field.get()/Field.set()方法的時(shí)候傳入 null 做為參數(shù)而不用傳遞擁有該變量的類(lèi)的實(shí)例。(譯者注:你如果傳入擁有該變量的類(lèi)的實(shí)例也可以得到相同的結(jié)果)

本文鏈接地址: Java Reflection(四):變量

上一篇:Java 泛型