当前位置: 首页 > 知识库问答 >
问题:

使用JAXB创建不可变对象

景靖琪
2023-03-14

我正在使用JAXB从XSD文件创建Java对象。我正在创建不可变包装器来隐藏由JAXB生成的对象(之前我更新了JAXB对象,以实现不可变接口并将接口返回给客户机。但意识到改变自动生成的类是不好的,因此使用包装器)

目前,我正在将这些不可变的包装返回到客户端应用程序。是否有任何选项,使自动生成的类将是不可变的,并避免创建不可变包装器的额外工作。任何其他方法都是鼓励的。

  • 谢谢

共有1个答案

澹台鸿熙
2023-03-14

在JSR-133(Java1.5依赖项)中,您可以使用反射来设置未初始化的最终变量。因此,您可以在私有构造函数中初始化为null,并在不使用任何XMLAdapter的情况下干净地使用JAXB+immutable。

https://test.kuali.org/svn/rice/sandbox/immutable-jaxb/中的示例,从Blaise的博客http://blog.bdoughan.com/2010/12/jaxb-and-immutable-objects.html#comment-form_584069422380571931中获得了这个示例

package blog.immutable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="customer")
@XmlAccessorType(XmlAccessType.NONE)
public final class Customer {

    @XmlAttribute
    private final String name;

    @XmlElement
    private final Address address;

    @SuppressWarnings("unused")
    private Customer() {
        this(null, null);
    }

    public Customer(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public Address getAddress() {
        return address;
    }

}
 类似资料:
  • 问题内容: 如何使用下面的代码解组XML字符串并将其映射到下面的JAXB对象? 问题答案: 要传递XML内容,您需要将内容包装在中,然后将其解组:

  • Kotlin有一个const关键字。但我不认为kotlin中的常数是我所认为的。这似乎与C中的const非常不同。在我看来,its仅适用于静态成员和Java中的原语,不针对类变量进行编译: 由于这似乎不起作用,我认为我真正想要的是第二个类,它删除我不想支持的操作: 这种方法的明显缺点是,我不能忘记更改这个类,以防我更改,这对我来说非常危险。 但是我不确定如何做到这一点。所以问题是:如何用意识形态静

  • 问题内容: 我在Python 2.6和3.2中遇到了让我感到惊讶的行为: 但是,3.2中的理解显示出更礼貌的举止: 为什么会这样? 问题答案: 您的Python 2.6示例与以下示例等效,这可能有助于阐明: 结果字典中的每个条目都将引用同一对象。如您所见,使该对象发生变异的效果将在每个dict条目中可见,因为它是一个对象。 使用dict理解,或者如果您使用Python 2.6或更早版本并且没有字典

  • 我是第一次在学校项目中使用JavaFX,所以很可能我做了一些明显错误的事情。 在我的controller类中,我有一个方法(customerSU),它创建了一个新的Customer和Cleast对象,我使用这些新的Customer和Cleast对象的其他方法有一个错误“无法解析符号”Cust1“。 谢谢你的帮助!

  • 我的目标是让Java对象不可变。我有一个班级< code >学生。为了实现不变性,我用以下方式对它进行了编码: 我的问题是,实现班级不变性的最佳方法是什么?

  • 问题内容: 我正在努力使可变对象与不可变对象有关。使用可变对象会带来很多负面影响(例如,从方法中返回字符串数组),但是我很难理解它的负面影响。使用可变对象的最佳实践是什么?您是否应尽可能避免使用它们? 问题答案: 好吧,这有几个方面。 没有参考身份的可变对象会在奇数时间导致错误。例如,考虑使用基于值的方法的 : 当实例用作键时,实例在映射中“丢失”,因为实例和相等性基于可变值。这些值在映射之外更改