如何在CDI生成器中检索泛型参数类?

时间:2016-04-25 06:20:05

标签: java generics cdi

我有一个带有泛型类型的Java类。在该类的业务逻辑中,我需要引用泛型类型的Class对象。因此,构造函数获取作为参数传递的Class对象:

public class MyClass<GENERIC_TYPE>{
    private Class<GENERIC_TYPE> genericTypeClass;

    public MyClass(Class<GENERIC_TYPE> genericTypeClass){
        this.genericTypeClass=genericTypeClass;
    }
}

我使用CDI生成器创建此类的实例,其squeleton看起来像

public class MyClassProducer{
    @Produces
    MyClass<GENERIC_TYPE> createMyClass(InjectionPoint injectionPoint){
        Class<GENERIC_TYPE> genericTypeClass = ????
        return new MyClass(genericTypeClass);
    }
}

如何检索genericTypeClass

1 个答案:

答案 0 :(得分:1)

解决方案是两个班轮:

public class MyClassProducer {
    @Produces
    <GENERIC_TYPE> MyClass<GENERIC_TYPE> createMyClass(InjectionPoint injectionPoint){
        final ParameterizedType parameterizedType = (ParameterizedType) injectionPoint.getType();
        final Class<GENERIC_TYPE> genericTypeClass = 
            (Class<GENERIC_TYPE>) parameterizedType.getActualTypeArguments()[0];
        return new MyClass(genericTypeClass);
    }
}