如何获得泛型类的类?

时间:2013-06-17 18:14:02

标签: java jaxb2

我正在尝试通过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

有没有办法可以用通用的方法来完成?

1 个答案:

答案 0 :(得分:6)

不是你想要的方式。这是由于类型擦除。在运行时,所有T都将转换为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;
   }
}