Ответ 1
Типичный, но коллиматорный способ сделать это - передать токен Class<T>
", где компилятор может его увидеть":
public abstract class RootProcessor<T> {
Class<T> clazz;
protected RootProcessor<T>(Class<T> clazz) {
this.clazz = clazz;
}
}
public class FooProcessor extends RootProcessor<Foo> {
public FooProcessor() {
super(Foo.class);
}
}
Если вы делаете непроверенный актерский состав, но вы "знаете, что делаете", и хотите, чтобы компилятор прекратил жаловаться, правильный подход будет локализовать не-тип-безопасный, но-вы-know-they- рабочие биты и используя @SuppressWarnings
:
public abstract class RootProcessor<T> {
Class<T> clazz;
{ initClazz(); }
@SuppressWarnings("unchecked")
private void initClazz() {
// the usual verbiage you already have in your question
this.clazz = this.getClass().getGenericSuperclass().yadda().blah();
}
}
(я не буду держать это против вас: P)