我正在使用 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/