我正在尝试通过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
有没有办法可以用通用的方法来完成?
答案 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;
}
}