假设我有以下内容:
为什么会这样呢?我有什么明显的漏洞吗?
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!
}
为什么会这样呢?我有什么明显的漏洞吗?