java - 如何获取泛型类的类?

标签 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

那么有没有一种方法可以通过泛型来实现这一点?

最佳答案

不是你想要的方式。这是由于类型删除造成的。在运行时,所有 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;
   }
}

关于java - 如何获取泛型类的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154047/

相关文章:

java - 无法在目标阶段生成 jaxb .xsd 到 java 类

java.lang.NoSuchFieldError : INSTANCE in HttpClient when running Oozie 错误

java - 左侧填充零的十六进制字符串

java.lang.VerifyError 关于一分钟前有效的方法

java - 具有 2 个根元素的 XSD(一次 1 个)

java - JAXB boolean 值 TRUE/FALSE 大写返回 null

java - Android Studio 模块中未找到 Chaquopy

java - Spring 5 : Web Reactive 的真实 Controller 示例

java - 通过 Jersey 发布 JSON

xsd - 如何更改生成的 JAXB 类的 XmlType