gpt4 book ai didi

Java JAXB 如何将 XmlElements 重新定义为现有变量

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:37 24 4
gpt4 key购买 nike

当使用 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;
}

也就是说,我有一个列表,children,由X:s和Y:s组成

现在我的问题是:我想继承 A,我想重新定义“XmlElements”列表并将其绑定(bind)到相同的变量“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;
}

上述问题有两个方面:

  1. 我创建了一个新的变量children,我想引用类A中的变量。

  2. 我想避免重新指定“x”和“y”,因为它们已在“A”中指定。

是否有一些好的模式可以实现这一点?

或者关于如何构建这样的东西的一些指针/文章或其他信息?

最佳答案

无法避免重新声明注释,但是您可以将注释从字段移到 getter 方法,只要您使用 @XmlAccessorType 告诉 JAXB 寻找公共(public) 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 的注释,但它可能会混淆。

试试看。

关于Java JAXB 如何将 XmlElements 重新定义为现有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com