如何检索CDI生产者中的通用参数类? [英] How to retrieve class of generic argument in a CDI producer?

查看:80
本文介绍了如何检索CDI生产者中的通用参数类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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




$ b我创建了这个类的实例,一个CDI生产者,其样子看起来像


  public class MyClassProducer {
@Produces
MyClass< GENERIC_TYPE> createMyClass(InjectionPoint injectionPoint){
Class< GENERIC_TYPE> genericTypeClass = ????
返回新的MyClass(genericTypeClass);




$ b $ p $如何检索 genericTypeClass ?

解决方案

解决方案是一个双线程:

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


I have a Java class with a generic type. In the business logic of that class, I need to refer to the Class object of the generic type. Therefore, the constructor get the Class object passed as argument:

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

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

I create the instance(s) of this class using a CDI producer, whose squeleton looks like

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

How do I retrieve genericTypeClass ?

解决方案

Solution is a two liner:

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

这篇关于如何检索CDI生产者中的通用参数类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆