如何在java中编写T.class? [复制]

Posted

技术标签:

【中文标题】如何在java中编写T.class? [复制]【英文标题】:how to write T.class in java? [duplicate] 【发布时间】:2012-10-16 12:25:04 【问题描述】:

可能重复:how to get class instance of generics type T

模板的 T 在

JAXBContext jaxbContext = JAXBContext.newInstance(T.class);

无法编译 T.class ,是否需要反射以及如何?

    public void ConvertObjectToXML(String path, T bobject)
    
        //Convert XML to Object
        File file = new File(path);
        JAXBContext jaxbContext = JAXBContext.newInstance(T.class);

        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        T customer2 = (T) jaxbUnmarshaller.unmarshal(file);
        System.out.println(customer2);
    

【问题讨论】:

这个“T”参考是什么?它看起来不像是通用的(由于 T.class 参考)。你是怎么来的? T 不是一个类,是吗? 我猜T是这里的泛型类型?在这种情况下,上述代码将无法编译,因为T.class 无效。这是由于类型擦除。如果您在运行时需要泛型的类,请看这里:***.com/questions/2225979/… 是的,是泛型类型,Template的T Java 泛型与 C++ 中的模板不同;不要将 T 称为“模板的 T”。 【参考方案1】:

由于 Java 处理泛型类型的方式,这段代码无法工作:

public class Factory<T>
   public T create()
      return T.class.newInstance();
   

您需要将实际的泛型类型传递给构造函数(或任何其他方法):

public class Factory<T>
   Class<T> c;
   publict Factory(Class<T> c)
       this.c=c;
   
   public T create()
       return c.newInstance();
   

经典的方法是从数组中推断出泛型类型,因为数组确实保存了它的类型:

public interface List<T>
   ...
   T[] toArray(T[] target);
   ..

这是因为Factory&lt;T&gt;的实际运行时类型仅仅是Factory,所以运行时无法访问其泛型类型。

【讨论】:

怎么称呼呢?我使用 XMLObj XMLtool = new XMLObj(customer);不成功 最后我使用了 XMLObj XMLtool = new XMLObj(Customer.class);

以上是关于如何在java中编写T.class? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java 如何获取泛型T的T.class当参数

Java 如何获取泛型T的T.class当参数

如何在java中深度复制对象。该对象可能是也可能不是可序列化的[重复]

如何解决这个java方法中的***异常? [复制]

如何从网页中获取此特定内容? [复制]

如何在字符 ASCII 字符串中以数字形式转换 java id? [复制]