假设我有这个:
class Base<T> {}
class Derived<T> extends Base<T> {}
然后在我的代码中,我可以安全地投射而不会发出这样的警告:
public <T> void foo(Base<T> base) {
Derived<T> f = (Derived<T>) base; // fine, no warning
}
这很好。但是如果派生类有更多的类型参数,它就不再起作用了:
class Base<T> {}
class Derived<T, U> extends Base<T> {}
public <T> void foo(Base<T> base) {
Derived<T, ?> f = (Derived<T, ?>) base; // unchecked warning!
}
这是为什么?我在这里有什么明显的遗漏吗?