0

我正在尝试创建一个泛型类,用于通过 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

那么有没有办法用泛型来完成呢?

4

1 回答 1

6

不是你想要的方式。这是由于类型擦除。在运行时,所有Ts 都转换为Object. 因此,在您的解决方案中,您将始终创建一个Objectnot a 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;
   }
}
于 2013-06-17T18:16:14.447 回答