类型安全的,但是可行的方式是通过类< T>令牌“编译器可以看到它”:
public abstract class RootProcessor {
Class clazz;
protected RootProcessor(Class clazz) {
this.clazz = clazz;
}
}
public class FooProcessor extends RootProcessor {
public FooProcessor() {
super(Foo.class);
}
}
如果你正在做一个未选中的转换,但你“知道你在做什么,并希望编译器停止抱怨,正确的方法是本地化非类型安全,但你知道他们工作位,使用@SuppressWarnings:
public abstract class RootProcessor {
Class clazz;
{ initClazz(); }
@SuppressWarnings("unchecked")
private void initClazz() {
// the usual verbiage you already have in your question
this.clazz = this.getClass().getGenericSuperclass().yadda().blah();
}
}
(我不会反对你:P)