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
作为参数传递给get
和set
方法,而不是上面传递的objectInstance
参数。