原文地址: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反射——类的动态加载和重新加载

(敬请期待下一篇翻译)

最新文章

  1. 关于Go,你可能不注意的7件事(转的)
  2. hdu2457DNA repair(ac自动机+dp)
  3. [Debian]8.2升8.3
  4. bootstrap 学习笔记
  5. centos7 拨号之后添加路由
  6. 8种NOsql
  7. Centos之LAMP环境搭建
  8. CSS2简写代码(优化)
  9. 应用git(SSH设置)
  10. 游戏开发设计模式之对象池模式(unity3d 示例实现)
  11. hdu 5562 Clarke and food(贪心)
  12. nginx+tomcat单个域名及多个域名配置
  13. 微信小程序避坑指南
  14. P1821 [USACO07FEB]银牛派对Silver Cow Party
  15. javascript data format
  16. bzoj 5301: [Cqoi2018]异或序列
  17. Framework 7 日历插件改成Picker 模式
  18. 【刷题】BZOJ 2142 礼物
  19. CodeForces 785B Anton and Classes
  20. StrobeMediaPlayback的Javascript桥接

热门文章

  1. JavaScript之Json的使用
  2. 导出数据到EXL表格中
  3. JS--操作DOM树
  4. Lodop打印控件设置表格次页偏移
  5. Javascript 实现复制(Copy)动作方法大全
  6. 13.kubernetes之pv,pvc,configmap(带补充实例)
  7. hibernate主配置文件的配置
  8. pycharm中查看源码的快捷键
  9. int,String转换
  10. LOJ2116 [HNOI2015] 开店 【点分治】