问题
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
?
回答1:
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);
}
}
来源:https://stackoverflow.com/questions/36833292/how-to-retrieve-class-of-generic-argument-in-a-cdi-producer