Search code examples
javaclassgenericstypesparameterized

Get class of generic


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?


Solution

  • You can provide the type dynamically, however the compiler doesn't do this for you automagically.

    public abstract class LastActionHero<H extends Hero>(){
        protected final Class<H> hClass;
        protected LastActionHero(Class<H> hClass) {
            this.hClass = hClass;
        }
        // use hClass how you like.
    }
    

    BTW: It not impossible to get this dynamically, but it depends on how it is used. e.g

    public class Arnie extends LastActionHero<MuscleHero> { }
    

    It is possible to determine that Arnie.class has a super class with a Generic parameter of MuscleHero.

    public class Arnie<H extend Hero> extends LastActionHero<H> { }
    

    The generic parameter of the super class will be just H in this case.