【问题标题】:How get class for a Generics class? [duplicate]如何获得泛型课程的课程? [复制]
【发布时间】:2013-06-13 19:00:48
【问题描述】:

我正在尝试创建一个泛型类,以便通过 JAXB 进行反序列化/序列化。在创建JAXBContext 时,必须传入一个类,当然对于泛型类,这是事先不知道的。

所以当我尝试这个时,我当然会遇到编译错误。

public class ServerSerializing<T>
{
    private JAXBContext mJAXBContext = null;

    public JAXBContext getJAXBContext()
    {
        if(mJAXBContext == null)
            mJAXBContext = JAXBContext.newInstance(T.class);

        return mJAXBContext;
    }
}

结果:

 Illegal class literal for the type parameter T

那么有没有办法用泛型来做到这一点?

【问题讨论】:

  • 怎么可能还在做 Java 却还不知道类型擦除?类令牌作为解决方法并不是一个新想法。
  • @JohnB,谢谢!我试图先找到解决方案,但显然我没有使用正确的关键字。

标签: java jaxb2


【解决方案1】:

不是你想要的方式。这是由于类型擦除。在运行时,所有Ts 都转换为Object。因此,在您的解决方案中,您将始终只创建 Object 而不是 T。解决方案是将class 实例传递给泛型的构造函数。

public class ServerSerializing<T>
{
   private JAXBContext mJAXBContext = null;
   private final Class<T> type;

   public ServerSerializing(Class<T> type){
     this.type = type;
   }

   public JAXBContext getJAXBContext()
   {
    if(mJAXBContext == null)
        mJAXBContext = JAXBContext.newInstance(type);

    return mJAXBContext;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多