如何在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<T>
的实际运行时类型仅仅是Factory
,所以运行时无法访问其泛型类型。
【讨论】:
怎么称呼呢?我使用 XMLObj以上是关于如何在java中编写T.class? [复制]的主要内容,如果未能解决你的问题,请参考以下文章