Вы можете указать тип динамически, однако компилятор не сделает этого автоматически.
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.
}
Кстати: это не невозможно получить динамически, но это зависит от того, как это используется. * например 1004 *
public class Arnie extends LastActionHero<MuscleHero> { }
Можно определить, что Arnie.class имеет суперкласс с универсальным параметром MuscleHero.
public class Arnie<H extend Hero> extends LastActionHero<H> { }
В этом случае универсальный параметр суперкласса будет просто H
.