【译】4. Java反射——字段
原文地址:http://tutorials.jenkov.com/java-reflection/fields.html
========================================================================================
使用java反射,你可以在运行时检查类的字段(成员变量)并且get/set它们的值。这些是通过Java类java.lang.reflect.Field做的。本文将会给出更详细的关于Field对象的信息。请记住也去查阅Sun的JavaDoc。下面是主题列表:
- Obtaining Field Objects (获取Field对象)
- Field Name (字段名)
- Field Type (字段类型)
- 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。
========================================================================================
- 目录
这是一个本教程到目前为止涵盖的主题列表:
- Java反射——引言
- Java反射——Class对象
- Java反射——构造函数
- Java反射——字段
- Java反射——方法
- Java反射——Getter和Setter
- Java反射——私有字段和私有方法
- Java反射——注解
- Java反射——泛型
- Java反射——数组
- Java反射——动态代理
- Java反射——类的动态加载和重新加载
(敬请期待下一篇翻译)
最新文章
- 关于Go,你可能不注意的7件事(转的)
- hdu2457DNA repair(ac自动机+dp)
- [Debian]8.2升8.3
- bootstrap 学习笔记
- centos7 拨号之后添加路由
- 8种NOsql
- Centos之LAMP环境搭建
- CSS2简写代码(优化)
- 应用git(SSH设置)
- 游戏开发设计模式之对象池模式(unity3d 示例实现)
- hdu 5562 Clarke and food(贪心)
- nginx+tomcat单个域名及多个域名配置
- 微信小程序避坑指南
- P1821 [USACO07FEB]银牛派对Silver Cow Party
- javascript data format
- bzoj 5301: [Cqoi2018]异或序列
- Framework 7 日历插件改成Picker 模式
- 【刷题】BZOJ 2142 礼物
- CodeForces 785B Anton and Classes
- StrobeMediaPlayback的Javascript桥接