如何检索CDI生产者中的通用参数类? [英] How to retrieve class of generic argument in a CDI producer?
本文介绍了如何检索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屋!
查看全文