Puede proporcionar el tipo de forma dinámica, sin embargo, el compilador no hace esto para usted automágicamente.
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: No es imposible obtener esto de forma dinámica, pero depende de cómo se use. por ejemplo
public class Arnie extends LastActionHero<MuscleHero> { }
Es posible determinar que Arnie.class tiene una super clase con un parámetro Genérico de MuscleHero.
public class Arnie<H extend Hero> extends LastActionHero<H> { }
El parámetro genérico de la superclase será sólo H
en este caso.