2.4 获取、设置字段值
要实现序列化,必须要保存 字段值,所以 serializeObject 方法必须能够获取字段值,若字段值为对象引用,则 被引用对象 也需要序列化。
serializeObject 方法的入参为 Object 类型,不知道其实际类型,所以无法直接访问其字段,也无法通过 getter/setter 方法访问字段,强制类型转换 后虽然可以访问,但限制我们必须提前了解 obj 的类型。
通过 Field 对象可以实现对字段的反射访问和设置:
Object value = field.get(obj);
get方法返回值为Object类型,若字段为 原始类型,则返回其 包装类。- 若已知字段为 原始类型,则可直接调用对象的
getPrimitive方法,省去解包装。
field.set(obj, value);
set方法第二个参数为Object类型,若字段为 原始类型,则需要 手动包装。- 若已知字段为 原始类型,则可直接调用对象的
setPrimitive方法,省去手动包装。
异常
IllegalArgumentException- 对象中 没有定义,也 没有继承 该字段。
- 该字段不能被赋值。
- 使用
get/setPrimitive时,若字段值不能 类型转换 到期望类型。
IllegalAccessException- 字段访问权限不足。