Better

业精于勤荒于嬉

Java反射4-成员变量

Better's Avatar 2017-02-23 Java译文

  1. 1. 获取成员变量
  2. 2. 成员变量名称
  3. 3. 成员变量类型
  4. 4. 获取或者改值
  • Obtaining Field Objects
  • Field Name
  • Field Type
  • Getting and Setting Field Values

通过Java反射你能获取到类的成员变量以及可以在运行时get/set他们的值。这是通过类java.lng.reflect.Fidld来完成的。记得去阅读Sun公司的JavaDoc。

获取成员变量

成员变量是通过Class类获取的:

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

fields数组的值与类中每个申明为public的成员变量对应。
如果你知道类中成员变量的命名,你可以这样获取:

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

列子中返回类MyObject中申明为public的成员变量的对象:

1
2
3
4
public class MyObject{
public String someField = null;

}

如果getField()方法没有获取到指定的参数对应的成员变量对象,将会抛出NoSuchFieldException

成员变量名称

一旦你成功获取了成员变量的对象,你可以获取到它在类中定义的名称。

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

成员变量类型

通过Field.getType()方法你可以确定成员变量的类型:

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

获取或者改值

一旦你获取到了成员变量的对象你可以通过Field.get()Field.set()方法来改变它的值:

1
2
3
4
5
6
7
8
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类的成员。
get和set方法传递null来操作static的成员变量域,而不是类的对象。

原文

This article was last updated on days ago, and the information described in the article may have changed.