给出模板类:
public class A<T> {}
并实例化为:
A<B> a = new A<>();
如何获取模板参数?的类数据类型,相当于使用T模板参数执行B.class,因此它适用于不同的实例化。
背景,我正在使用JAXB来将类编组/解组为XML,但是为了创建JAXBContext
,一个Class对象是nedded。这个JAXBContext用在模板类中,为了解决这个问题,我目前正在使用带有模板参数类的构造函数参数:
public class A<T> {
public A( Class<T> tClass ){}
}
将其实例化为:
A<B> a = new A<>( B.class );
对我来说看起来有点奇怪,有更好的方法吗?
答案 0 :(得分:2)
还有一种方法可以在运行时获取类型信息。
类型擦除对于匿名类没有发生。所以你可以做的是在创建类A的对象时,只需添加{},这将使它成为匿名类。
A<B> aObject = new A<>() {};
您可以使用TypeTokenTree
获取第n个通用参数。
this.typeT = new TypeTokenTree(this.getClass()).getElement(0);
理查德有很好的blog post描述了这个的完整工作流程。
这种方法的优点在于,您的客户每次都不必提供类型信息。