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
- 字段访问权限不足。