184.5.2. 什么是多态对象映射?


在某些情况下,序列化对象的接收器无法预先知道对象类型。例如,这适用于一个多形对象数组。考虑抽象类型、Shape 及其子类型、三角Square (等等):

package com.example;
...
public abstract class Shape {
}

public class Triangle extends Shape {
  ...
}

public class Square extends Shape {
  ...
}

public class ListOfShape {
  public List<Shape> shapes;
  ...
}

您可以实例化并序列化一个格式数组列表(ListOfShape),如下所示:

ObjectMapper objectMapper = new ObjectMapper();

ListOfShape shapeList = new ListOfShape();
shapeList.shapes = new ArrayList<Shape>();
shapeList.shapes.add(new Triangle());
shapeList.shapes.add(new Square());

String serialized = objectMapper.writeValueAsString(shapeList);

但是,接收器中现在存在一个问题。您可以通过将 type 指定为 readValue () 的第二个参数来告知接收器预期 ListOfShape 对象:

MyClass myobject = objectMapper.readValue(serialized, ListOfShape.class);
ObjectMapper objectMapper = new ObjectMapper();

但是,没有接收器可以知道列表的第一个元素是 三角,第二个元素是 Square。要解决此问题,您需要启用多 形对象映射,如下一节中所述。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.