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

当使用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中获取注释,但它可能会让人感到困惑.

试试看吧.

点赞