2.4 获取、设置字段值

要实现序列化,必须要保存 字段值,所以 serializeObject 方法必须能够获取字段值,若字段值为对象引用,则 被引用对象 也需要序列化。

serializeObject 方法的入参为 Object 类型,不知道其实际类型,所以无法直接访问其字段,也无法通过 getter/setter 方法访问字段,强制类型转换 后虽然可以访问,但限制我们必须提前了解 obj 的类型。

通过 Field 对象可以实现对字段的反射访问和设置:

Object value = field.get(obj);
  • get 方法返回值为 Object 类型,若字段为 原始类型,则返回其 包装类
  • 若已知字段为 原始类型,则可直接调用对象的 getPrimitive 方法,省去解包装。
field.set(obj, value);
  • set 方法第二个参数为 Object 类型,若字段为 原始类型,则需要 手动包装
  • 若已知字段为 原始类型,则可直接调用对象的 setPrimitive 方法,省去手动包装。

异常

  1. IllegalArgumentException
    • 对象中 没有定义,也 没有继承 该字段。
    • 该字段不能被赋值。
    • 使用 get/setPrimitive 时,若字段值不能 类型转换 到期望类型。
  2. IllegalAccessException
    • 字段访问权限不足。

results matching ""

    No results matching ""