2.2.2 获取域
除了可以获取2.2.1节提到的构造方法之外,还可以通过反射API获取类中的域(field)。通过反射API可以获取到类中公开的静态域和对象中的实例域。得到表示域的java.lang.reflect.Field类的对象之后,就可以获取和设置域的值。与上面的构造方法类似,Class类中也有4个方法用来获取域,分别是getFields、getField、getDeclaredFields和getDeclaredField,其含义与获取构造方法的4个方法类似。代码清单2-18给出了获取和使用静态域和实例域的示例,两者的区别在于使用静态域时不需要提供具体的对象实例,使用null即可。Field类中除了操作Object的get和set方法之外,还有操作基本类型的对应方法,包括getBoolean/setBoolean、getByte/setByte、getChar/setChar、getDouble/setDouble、getFloat/setFloat、getInt/setInt和getLong/setLong等。
代码清单2-18 使用反射API获取和使用静态域和实例域
public void useField()throws Exception{
Field fieldCount=FieldContainer.class.getDeclaredField("count");
fieldCount.set(null,3);
Field fieldName=FieldContainer.class.getDeclaredField("name");
FieldContainer fieldContainer=new FieldContainer();
fieldName.set(fieldContainer,"Bob");
}
总的来说,对域的获取和设置都比较简单。但是只能对类中的公开域进行操作。私有域没有办法通过反射API获取到,也无法进行操作。