For the long while I was using Java Generic types, in Methods, Fields and Classes, and I used to transfer the Class type instance as a parameter to the constructor or method respectively. Lately I've learned how Java's Generic types, can be determine in runtime.
To get the generic types of a Class:
abstract class ClassWithGenericParameterType<ItemType> {
private Class<ItemType> itemType;
ClassWithGenericParameterType() {
ParameterizedType classType = (ParameterizedType) getClass().getGenericSuperclass();
Type[] types = classType.getActualTypeArguments();
itemType= (Class<ItemType>) types[0];
}
}
To make this work:
class ExtendingParameterizedGenericClass extends ClassWithGenericParameterType<String> {...}
Thing is about this trick, is that the class you are analyzing must be abstract, and that a new Class would extend that abstract class specifying a valid
Class as the
Generic argument and not something like <
ItemType2 extends Number>, this would result in getting
Number.class!