【译】4. Java反射——字段

原文地址:http://tutorials.jenkov.com/java-reflection/fields.html

 ========================================================================================

     使用java反射,你可以在运行时检查类的字段(成员变量)并且get/set它们的值。这些是通过Java类java.lang.reflect.Field做的。本文将会给出更详细的关于Field对象的信息。请记住也去查阅Sun的JavaDoc。下面是主题列表:

  1. Obtaining Field Objects (获取Field对象)
  2. Field Name (字段名)
  3. Field Type (字段类型)
  4. Getting and Setting Field Values (get/set字段的值)

 

 ========================================================================================

  • Obtaining Field Objects 

     从Class对象中获取Field对象。这里有一个例子:

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

 

     数组Field[ ]将会存储在类中声明的所有为public的字段的Field对象。

     如果你知道你想要访问的字段的字段名,你可以像这样来访问它:

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

 

     上面的例子将会返回Field实例,和下面MyObject声明的字段someField对应:

 

public class MyObject{
  public String someField = null;
}

 

     如果不存在和方法getField( )接受的参数一致的字段,会抛出NoSuchFieldException异常。

 

 ========================================================================================

  • Field Name 

  一旦你获取了一个Field实例,你可以像这样通过Field.getName()方法取得字段名:

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

 

 ========================================================================================

  • Field Type 

     你可以通过Field.getType() 方法取得字段类型(String, int etc.) :

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

 

 ========================================================================================

  • Getting and Setting Field Values

  一旦你获取了Field对象的引用,你可以像这样通过Field.get()方法和Field.set()方法get/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的成员实例。
     如果字段是静态字段(public static …),则传null作为get和set方法的参数,而不是上面传的objectInstance。

 

 ========================================================================================

 

  • 目录

 

  这是一个本教程到目前为止涵盖的主题列表:     

 

  1. Java反射——引言
  2. Java反射——Class对象
  3. Java反射——构造函数
  4. Java反射——字段
  5. Java反射——方法
  6. Java反射——Getter和Setter
  7. Java反射——私有字段和私有方法
  8. Java反射——注解
  9. Java反射——泛型
  10. Java反射——数组
  11. Java反射——动态代理
  12. Java反射——类的动态加载和重新加载

 

(敬请期待下一篇翻译)

 

posted @ 2013-09-05 22:55  pengisgood  阅读(9865)  评论(0编辑  收藏  举报