获取模板参数的类数据类型?

时间:2016-08-11 06:13:14

标签: java templates generics

给出模板类:

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 );

对我来说看起来有点奇怪,有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

还有一种方法可以在运行时获取类型信息。
类型擦除对于匿名类没有发生。所以你可以做的是在创建类A的对象时,只需添加{},这将使它成为匿名类。

A<B> aObject = new A<>() {};

您可以使用TypeTokenTree获取第n个通用参数。

this.typeT = new TypeTokenTree(this.getClass()).getElement(0);

理查德有很好的blog post描述了这个的完整工作流程。

这种方法的优点在于,您的客户每次都不必提供类型信息。