我正在尝试通过JAXB创建一个用于去/序列化的泛型类.在创建JAXBContext类时必须传入,但当然使用泛型类,这是事先不知道的.
所以当我尝试这个时,我当然会得到一个编译错误.
public class ServerSerializing<T>
{
private JAXBContext mJAXBContext = null;
public JAXBContext getJAXBContext()
{
if(mJAXBContext == null)
mJAXBContext = JAXBContext.newInstance(T.class);
return mJAXBContext;
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
Illegal class literal for the type parameter T
Run Code Online (Sandbox Code Playgroud)
那么通过通用方法可以做到这一点吗?
不是你想要的方式.这是由于类型擦除.在运行时,所有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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |