私がこれを持っているとしましょう:
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!
}
何故ですか?ここで私が見逃している明らかなものはありますか?