My class starts with
public abstract class LastActionHero<H extends Hero>(){
Now somewhere in the code I want to write H.class
but that isn't possible (like String.class
or Integer.class
is).
Can you tell me how I can get the Class
of the generic?
You can do it without passing in the class:
You need two functions from this file: http://code.google.com/p/hibernate-generic-dao/source/browse/trunk/dao/src/main/java/com/googlecode/genericdao/dao/DAOUtil.java
For more explanation: http://www.artima.com/weblogs/viewpost.jsp?thread=208860
We do it in the following way:
You can't- the type is erased at run-time and exists only at compile-time.
One way is to keep reference to your parameterized type like having an attribute of
And create a setter or a constructor that takes in a
Class<H>
.Parameterized Types are erased at runtime, hence why you can't do what you ask.
You can provide the type dynamically, however the compiler doesn't do this for you automagically.
BTW: It not impossible to get this dynamically, but it depends on how it is used. e.g
It is possible to determine that Arnie.class has a super class with a Generic parameter of MuscleHero.
The generic parameter of the super class will be just
H
in this case.