Предположим, что у меня есть это:Casting родовым подтипов общего класса
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!
}
Почему это? Есть ли что-то очевидное, что я здесь отсутствует?
Почему это не работает? Это сработало для меня ... – m3th0dman
Что не работает, так это то, что я получаю предупреждение, хотя это отличное исполнение. –
Какой компилятор? Я вижу это с помощью компилятора Eclipse. –