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获取到,也无法进行操作。