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

(敬请期待下一篇翻译)

【译】4. Java反射——字段的更多相关文章

  1. java反射——字段

    大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...

  2. 【译】7. Java反射——私有字段和私有方法

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

  3. 【译】1. Java反射——引言

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它可以在运行时检查类.接 ...

  4. 【译】2. Java反射——Class对象

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

  5. 【译】3. Java反射——构造函数

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

  6. 【译】5. Java反射——方法

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

  7. 【译】6. Java反射——Getter和Setter

    原文地址:http://tutorials.jenkov.com/java-reflection/getters-setters.html ============================== ...

  8. 【译】8. Java反射——注解

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

  9. 【译】9. Java反射——泛型

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

随机推荐

  1. python之路--MySQl单表查询

    一.  关键字的执行优先级(重点) from where group by having # 使用是要放在group by 后面而且前面必须有group by select distinct # 去重 ...

  2. Golang的channel使用以及并发同步技巧

    在学习<The Go Programming Language>第八章并发单元的时候还是遭遇了不少问题,和值得总结思考和记录的地方. 做一个类似于unix du命令的工具.但是阉割了一些功 ...

  3. MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别

    参考:MySQL中KEY.PRIMARY KEY.UNIQUE KEY.INDEX 的区别 对于题目中提出的问题,可以拆分来一步步解决.在 MySQL 中 KEY 和 INDEX 是同义.那这个问题就 ...

  4. Windows & RabbitMQ:Shovel

    RabbitMQ的集群和高可用不适合跨域的情况,如果跨域可以使用Shovel或Federation. 描述:我们需要配置三台服务器:ServerA, ServerB, ServerC Step 1:安 ...

  5. CSS3 flexbox 布局 ---- flex项目属性介绍

    现在介绍用在flex项目上的css 属性,html结构还是用ul, li 结构,不过内容改成1,2,3, 样式的话,直接把给 ul 设display:flex 变成flex 容器,默认主轴的方向为水平 ...

  6. python---反射详解

    反射即想到4个内置函数分别为:getattr.hasattr.setattr.delattr  获取成员.检查成员.设置成员.删除成员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  7. System.Diagnostics.Process启动Civil 3D及AutoCAD

    QQ群友提出问题, 如何启动Civil 3D或者AutoCAD, Kean的博客里有相关的文章 http://through-the-interface.typepad.com/through_the ...

  8. MySQL中表复制:create table like 与 create table as select

    CREATE TABLE A LIKE B 此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来. CREATE TABLE A AS SELECT x,x,x,xx FROM B ...

  9. 使用coobird Thumbnailator生成缩略图

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  10. puppet的常用语法

    检查语法错误 puppet parser validate xx.pp 在客户端测试但是不应用 puppet agent --test --noop 基于安全的考虑,使用预签名证书 puppet ce ...