如何在 CDI 生产者中检索 class 的通用参数?
How to retrieve class of generic argument in a CDI producer?
我有一个 Java class 具有通用类型。在那个class的业务逻辑中,我需要引用泛型类型的Class
对象。因此,构造函数获取作为参数传递的 Class
对象:
public class MyClass<GENERIC_TYPE>{
private Class<GENERIC_TYPE> genericTypeClass;
public MyClass(Class<GENERIC_TYPE> genericTypeClass){
this.genericTypeClass=genericTypeClass;
}
}
我使用 CDI 生产者创建了这个 class 的实例,其 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 class 具有通用类型。在那个class的业务逻辑中,我需要引用泛型类型的Class
对象。因此,构造函数获取作为参数传递的 Class
对象:
public class MyClass<GENERIC_TYPE>{
private Class<GENERIC_TYPE> genericTypeClass;
public MyClass(Class<GENERIC_TYPE> genericTypeClass){
this.genericTypeClass=genericTypeClass;
}
}
我使用 CDI 生产者创建了这个 class 的实例,其 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);
}
}