1

我正在编写一个类,它将数据(每个接口定义)写入不同的 xml 输出格式(不同的 JAXB 类)。所有支持的类型都存储在一个 Enum (SupportedTypes) 中。Enum 存储了相应的 JAXB-Class。枚举看起来像这样:

public enum Types {
/**
 * Invoice from hospitals.
 */
Type1(...generatedClasses.invoice.hospital400.request.RequestType.class),
/**
 * Invoice from hospital but with MediData's quality extensions. The
 * response has no extensions.
 */
Type2(...generatedClasses.invoice.hospital400_QO.request.RequestType.class);

/**
 * Class for request. represents the root element in corresponding xml.
 */
private Class<?> rType;

/**
 * 
 * @param requestType
 *            class of corresponding request type
 */
private InvoiceTypes(final Class<?> requestType) {
    this.requestType = requestType;
}

/**
 * @return the requestType
 */
public final Class<?> getRequestType() {
    return requestType;
}

}

我的问题是如何使用这种类型来实例化像 JAXBElement 这样的类型化泛型。typeEnum 作为参数给出,我想创建 JAXBElement 但这显然不起作用。现在我被困住了。如何构造这样的构造函数或方法。

提前谢谢

编辑澄清:

让我们假设您创建了一个支持不同类型的类(“ClassForTypes”)——无论它对它们做什么(TheirClass、SpecialClass、MyClass)。api 不会发布这些类(它们非常具体),而是会发布一个“TypeEnum”(TypeOne、TypeTwo、TypeThree)来存储类的类型(TheirClass、SpecialClass、MyClass)。在 ClassForTypes 的构建时,它将使用给定的 TypeEnum 来创建让我们说一个List<type saved in enum>. 如何构造这样的 ClassForTypes 或其构造函数?

一些示例代码(不起作用):我想以这种方式使用上面的枚举:

public class Blub{

    public Blub(Types type){
        List<type.getRequestType> typedList = new ArrayList...
    }

}

这不起作用。但是列表的类型在编译时是已知的(因为它存储在枚举中?)。有什么方法可以静态存储类型并使用它来获取类型化的泛型?我不希望 api 用户知道用户应该只知道通过枚举传递的“支持的类型”的单个请求类型。

4

1 回答 1

0

你的问题不太清楚你想要做什么。您是否尝试向枚举添加功能?像这样的东西?

public enum Types {
  Type1(String.class) {
    @Override
    public Object make () {
      return new String();
    }
  },
  Type2(Integer.class) {
    @Override
    public Object make () {
      return new Integer(0);
    }
  };

  private Class<?> rType;

  Types(final Class<?> requestType) {
    this.rType = requestType;
  }

  public final Class<?> getRequestType() {
    return rType;
  }

  // All types must have a make method.
  public abstract Object make();
}
于 2013-05-02T09:53:58.917 回答