java - 如何在 CDI 生成器中检索通用参数的类?

标签 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

最佳答案

解决方案是两行:

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

关于java - 如何在 CDI 生成器中检索通用参数的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36833292/

相关文章:

Java 编译因方法引用而失败,但适用于 lambda

java - 将类引用传递给注入(inject)实例的更好方法

Java Applet刷新问题

java - Ant 将类提取到 Jar 中

C# 如何用空值而不是零初始化通用 int 数组?

C# LINQ - 将 IEnumerable<string> 与匿名列表进行比较?

java - Wildfly 8 和焊接 CDI 通过提供程序方法注入(inject)不注入(inject)依赖项

java - REST 触发的 CDI 事件无法更新 Vaadin UI

java - 如何通过索引选择随机元素?

java.lang.NoClassDefFoundError : Lorg/infinispan/manager/EmbeddedCacheManager