Java反射-字段

时间:2020-01-09 14:20:02  来源:igfitidea点击:

使用Java Reflection,我们可以检查类的字段(成员变量)并在运行时获取/设置它们。这是通过Java类java.lang.reflect.Field完成的。本文将更详细地介绍JavaField对象。记住也要从Sun签出JavaDoc。

获取现场对象

Field类是从Class对象获得的。这是一个例子:

Class aClass = ...//obtain class object
Field[] fields = aClass.getFields();

在类中声明的每个公共字段," Field []"数组都会有一个" Field"实例。

如果知道要访问的字段的名称,则可以按以下方式访问它:

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

上面的示例将返回与在下面的MyObject中声明的字段someField对应的Field实例:

public class MyObject{
  public String someField = null;

}

如果不存在名称为getField()方法的参数的字段,则抛出NoSuchFieldException。

栏位名称

一旦获得了Field实例,就可以使用Field.getName()方法获取其字段名称,如下所示:

Field field = ... //obtain field object
String fieldName = field.getName();

栏位类型

我们可以使用Field.getType()方法确定字段的字段类型(字符串,整数等):

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

获取和设置字段值

一旦获得了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);

传递给get和set方法的objectInstance参数应该是拥有该字段的类的实例。在上面的示例中,使用了MyObject的实例,因为someField是MyObject类的实例成员。

如果该字段是一个静态字段(公共静态...),则将null作为参数传递给getset方法,而不是上面传递的objectInstance参数。