我有一个从 xml 文件加载一些参数的应用程序:
JAXBContext jc = JAXBContext.newInstance(MyParams.class);
Unmarshaller u = jc.createUnmarshaller();
MyParams obj = (MyParams) u.unmarshal(inputStream);
我想将 MyParams 设置为 Singleton,可以吗?怎么办?
最佳答案
上面关于将 @XmlType 与工厂类和方法一起使用的答案是正确的。这种情况很少见,但在某些情况下单例在 XML 中是有意义的。
我有一种情况,我想要编码/解码值,例如日期、字符串、整数等。其中一个值类型为 null。在我的层次结构中,Java null 引用意味着未指定,因此我想要一个显式 Null 类来表示指定为 null 的值。
当然,没有理由有多个 Null 实例,因此它是单例。我把工厂类放在Null里面,如下:
@XmlRootElement(name = "null")
@XmlType(factoryClass = Null.Factory.class, factoryMethod = "nullInstance")
public final class Null extends Value {
public static class Factory {
public static Null nullInstance(
) {
return INSTANCE;
}
}
public static final Null INSTANCE = new Null();
// Construct
/**
* Construct
*/
private Null(
) {
if (INSTANCE != null) {
throw new RuntimeException("Null is a singleton class");
}
}
// Object
@Override
public String toString(
) {
return getClass().getSimpleName();
}
// Value
@Override
public boolean isCompound(
) {
return false;
}
@Override
public boolean isScalar(
) {
return true;
}
}
关于java - Jaxb 解码为单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806058/