gpt4 book ai didi

java - 使用 JAXB 创建不可变对象(immutable对象)

转载 作者:太空狗 更新时间:2023-10-29 23:00:34 25 4
gpt4 key购买 nike

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

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

  • 谢谢

最佳答案

从 JSR-133(Java 1.5 依赖项)开始,您可以使用反射来设置未初始化的最终变量。因此您可以在私有(private)构造函数中初始化为 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;
}

}

关于java - 使用 JAXB 创建不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11030805/

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