我有一个超级类型的列表,即
List<IFoo> foo
该列表包含来自两个不同子类型的对象:
public class FooBar implements IFoo{
}
public class FooType implements IFoo{
}
是否有办法将多种类型添加到XmlElement注释中,即
XmlElement(type={FooBar.class, FooType.class)
List<IFoo> foo
答案 0 :(得分:1)
您可以使用注释XmlElements
为列表设置多种类型。
E.g。
@XmlElements({
@XmlElement(type=FooBar.class),
@XmlElement(type=FooType.class)
})
List<IFoo> foo;
答案 1 :(得分:-1)
集合属性可以包含多种类型。使用此用例如果您希望能够往返文档,则需要某种类型指示符。
选项1 - @XmlElements
@XmlElements
注释采用@XmlElement
注释数组。这样做的目的是分配一个唯一的元素来识别每种类型。
选项2 - @XmlElement(type=Object.class)
如果您告诉JAXB该类型为Object
,它将强制使用xsi:type
属性写出每个值以唯一标识该类型。由于不会自动发现值类型,因此您需要先传递以创建JAXBContext
或使用@XmlSeeAlso
注释引用。