How can I use reflection to create a generic parameterized class in Java?
I have
public class SomeClass<T> {
public SomeClass<T>() {
}
}
and I need an instance of it.
I've tried variations of
Class c = Class.forName("SomeClass");
but could not find a syntax that would allow me to get an appropriately typed instance, like, say
SomeType instance = (SomeType)Class.forName("SomeClass<SomeType>").createInstance();
So, how could I go about doing this?
Java uses erasure-based generics (i.e., the type parameters are erased at runtime—for example, List<Integer>
and List<String>
are treated as the same type at runtime). Since reflection is inherently a runtime feature, the type parameters are not used or involved at all.
In other words, you can only instantiate the raw type (SomeClass
, not SomeClass<T>
) when you're using reflection. You will then have to manually cast the type to the generic version (and generate an unchecked
warning).