我有一堆JAXB带注释的类,它们有一个共同的字段,所以我把那个字段移到一个超类,就像这样
public class Base {
protected SomeType commonField;
}
@XmlRootElement(name = "foo") @XmlType(propOrder = { "commonField", "fooField" })
public class Foo extends Base {
private SomeOtherType fooField;
}
@XmlRootElement(name = "bar") @XmlType(propOrder = { "commonField", "barField" })
public class Bar extends Base {
private SomeOtherType barField;
}
现在每当我对Foo
或Bar
中的一个进行评分时,我都会IllegalAnnotationException
抱怨commonField
列在propOrder
但在课程中没有出现。从propOrder
注释中删除它一切正常,但我认为我应该列出所有映射的字段。我错过了什么?
答案 0 :(得分:26)
继承类的字段/属性将始终显示在子类的字段/属性之前。这意味着默认情况下,您无法在子类型的propOrder
中指定它们。但是,如果您将父类标记为@XmlTransient
,则字段/属性将被视为属于子类,并且可以包含在propOrder
中。