【译】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。

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

posted on 2018-06-26 18:31  腾飞的鹰  阅读(136)  评论(0)    收藏  举报

导航