zoukankan      html  css  js  c++  java
  • 【译】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反射——类的动态加载和重新加载

    (敬请期待下一篇翻译)

  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/penghongwei/p/3300073.html
Copyright © 2011-2022 走看看