当使用jaxb进行解组时,我在A类中有一些东西:
public class A {
@XmlElements( { //
@XmlElement(name = "g", type = A.class),
@XmlElement(name = "x", type = X.class),
@XmlElement(name = "y", type = Y.class),
})
List<XXX> children;
}
也就是说,我有一个列表,孩子,由X:s和Y:s组成
现在我的问题:我想继承A,我想
重新定义’XmlElements’列表并将其绑定到同一个变量’children’,
喜欢:
public class B extends A {
@XmlElements( { //
@XmlElement(name = "g", type = B.class),
@XmlElement(name = "x", type = X.class),
@XmlElement(name = "y", type = Y.class),
@XmlElement(name = "z", type = Z.class),
})
List<XXX> children;
}
以上问题有两个方面:
>我创建了一个新的变量children,我想引用A类中的变量.
>我想避免重新指定’x’和’y’,因为它们已在’A’中指定.
是否有一些良好的模式来实现这一目标?
或者一些关于如何构建这样的东西的指针/文章或其他信息?
最佳答案 没有避免重复声明注释,但是您可以将注释从字段移动到getter方法,只要您使用@XmlAccessorType注释告诉JAXB查找公共getter方法而不是字段.
因此,您可以使用新的注释集覆盖B类中的getChildren():
@XmlAccessorType(PROPERTY)
public class A {
private List<XXX> children;
@XmlElements( { //
@XmlElement(name = "g", type = A.class),
@XmlElement(name = "x", type = X.class),
@XmlElement(name = "y", type = Y.class),
})
public List<XXX> getChildren() {
return children;
}
public void setChildren(List<XXX> children) {
this.children = children;
}
}
@XmlAccessorType(PROPERTY)
public class B extends A {
@XmlElements( { //
@XmlElement(name = "g", type = B.class),
@XmlElement(name = "x", type = X.class),
@XmlElement(name = "y", type = Y.class),
@XmlElement(name = "z", type = Z.class),
})
public List<XXX> getChildren() {
return super.getChildren();
}
}
我不确定的是JAXB将如何处理重写的getChildren()方法.希望它能从B中获取注释,但它可能会让人感到困惑.
试试看吧.