java - Jaxb 解码为单例?

标签 java jaxb

我有一个从 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/

相关文章:

java - 这段java代码是做什么的?

java - <bpmndi :BPMNShape> Is Missing for participant and lane element in xml when trying to create pool and lane from java source

jaxb - 如何在 Jersey(JAX-WS) 上自定义命名空间前缀

java - 如何从jar文件访问资源文件

java - 如何从 Java 中的 XML 文件中删除 BOM

java - JSSE 引用指南中的 "the highest-priority implementation for the TrustManagerFactory"是什么?

java - 从 XSD 生成 Java 异常/使用 JAXB2 绑定(bind)异常

java - JAXBContext 和 Marshaller 更改 XML 命名空间的顺序

validation - JAX RS 泽西模式验证

java - 在我的 Java 应用程序中发现 ClassCastException