有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajaxb构造函数注入

我想知道如何让JAXB编译器在java类定义中将XML模式中的某些元素声明为final,我还想控制不同的构造函数,正如在中一样,我希望有一个构造函数可以使用类中包含的完整参数列表以及JAXB所需的默认私有构造函数来创建对象

有什么帮助吗

谢谢

下面是我正在尝试做的一个例子:

<xs:complexType name="mycomplex">
    <xs:all>
        <xs:element name="myboolean" type="xs:boolean"/>
    </xs:all>
</xs:complexType>

现在生成的代码看起来像

public class mycomplex
{
        protected boolean myboolean;

        public boolean getMyboolean() { return myboolean; }
        public void setMyboolean(boolean b) { this.myboolean = b; }
}

但我想编辑模式,使其看起来像:

public class mycomplex
{
        protected final boolean myboolean;

        public mycomplex(boolean b) { this.myboolean = b; }

        public boolean getMyboolean() { return myboolean; }
}

这能实现吗


共 (3) 个答案

  1. # 1 楼答案

    没有标准的JAXB方法来生成这样的类,因为JAXB规范不支持映射到这样的类

    您可以使用以下代码来避免使用set方法。如果需要,可以添加其他构造函数,只要有一个公共默认构造函数

    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    
    @XmlAccessorType(XmlAccessType.FIELD)
    public class mycomplex    
    {    
            protected final boolean myboolean;    
    
            public boolean getMyboolean() { return myboolean; }    
    }    
    

    如果要将上述类与非默认构造函数和标记为final的字段一起使用,则需要创建XmlAdapter:

  2. # 2 楼答案

    我用另一种方式解决了这个问题。我正在创建一个工具来编辑生成的java源代码文件,并添加/删除我需要的内容。有关更多信息,请参阅此文档:Using the Eclipse AST