实现此目的的类型安全但很简单的方法是传递
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); }}如果您执行的是未经检查的强制转换,但您“知道自己在做什么”,并且希望编译器停止抱怨,则正确的方法是将非类型安全但您知道它们的工作位本地化。使用
@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)



