内容索引
<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做为参数而不用传递拥有该变量的类的实例。(译者注:你如果传入拥有该变量的类的实例也可以得到相同的结果)