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。要解决此问题,您需要启用多 形对象映射,如下一节中所述。