Field
- 使用 Java 的反射机制获得类的成员变量的对象;
- 可以用 Field 类的 get 方法获取对象的值,也可以用 set 方法改变对象的值;
- java.lang.reflect.Field,详见:Class Field;
1. 定义格式
public final class Field extends AccessibleObject implements Member
;
- Field 类的对象表示类或接口的一个域,可以是静态域,也可以是实例域;
2. 主要方法
类型 |
方法 |
说明 |
Object |
get(Object o) |
获得 o 对象中相应域的值 |
Class |
getDeclaringClass() |
得到一个 Class 类的对象 |
String |
getName() |
获得 Field 类对象所表示的域的名字 |
T |
getAnnotation(Class annotationClass) |
获得 annotationClass 类中当前 Field 类对象所表示的域的注解实例 |
boolean |
isAnnotationPresent(Class annotationClass) |
判断 annotationClass 类中当前 Field 类对象所表示的域是否有注解 |
void |
set(Object o, Object value) |
设置与 Field 对象对应的 o 对象中的域的值为 value |
3. Java 实例
- 通过类的反射获得 Reflect 的 Class 对象 c;
- 调用 newInstance() 方法创建 Reflect 对象 r;
- 通过 Class 类的 getDeclaredField 方法获得对象 c 所表示的实体的指定 name 字段;
- 通过对 Field 类使用方法 setAccessible(true) 方法取消对私有成员变量 name 的访问检查;
- 通过对 Field 的 set 方法为对象 r 的 name 字段赋值,并通过它的 get 方法获得 name 字段的值;
- 获取 id 字段的步骤同理;
import java.lang.reflect.Field;
class Reflect {
private int id = 1;
private String name = "成员变量";
}
public class test {
public static void main(String[] args) {
try {
Class c = Class.forName("Reflect");
Reflect r = (Reflect) c.newInstance();
Field f = c.getDeclaredField("name");
f.setAccessible(true);
f.set(r, "成员变量");
System.out.println("name = " + f.get(r));
Field fId = c.getDeclaredField("id");
fId.setAccessible(true);
fId.setInt(r, 12);
System.out.println("id = " + fId.getInt(r));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}