2.3 理解 Filed 对象
serializeObject 必须将字段 序列化后的值 与该字段的 唯一标识 关联到一起,在 Java 中,声明类与字段名一起唯一标识一个字段,因此,接下来需要查询每个字段的 声明类 和 字段名。
上一节已经获取了代表对象字段的 Field 对象,通过 Field 对象可以获取字段名、声明类、限定符,以及获取、设置字段的值,Filed 提供的方法如下:
| 方法签名 | 说明 |
|---|---|
| Class getType() | 获取表示 字段类型 的 Class 对象 |
| Class getDeclaringClass() | 获取 声明 该字段的类的 Class 对象 |
| String getName() | 获取字段名字 |
| int getModifiers() | 获取字段的限定符(int 格式) |
| Object get(Object obj) | 获取 obj 对象中该类型的字段的值 |
| boolean getBoolean(Object obj) | 若字段为 boolean 类型,可以用该方法获取 |
| void set(Object obj, Object value) | 将 obj 对象上的该字段值设置为 value |
| void setBoolean(Object obj, boolean value) | 只能设置 boolean 类型的字段 |
注意
get可以获取 任意类型 的字段值。getBoolean等只能获取 特定类型 的字段值,若类型不对应,则出错。
若 field 表示一个字段对象,则可获取其声明类和字段名,作为该字段的 唯一标识符:
String fieldName = field.getName();
String fieldDeclClass = field.getDeclaringClass().getName();
将字段的 唯一标识符 (声明类 + 字段名)与 字段值 一起保存,反序列化器可以通过这些信息获取对象的 Field 对象,从而对字段赋值,在反序列化时,需要 加载 字段的声明类,所以将反序列化放在第三章讲解。