У меня есть следующие определения интерфейса и класса ...Зачем мне получать предупреждение о непроверенных заданиях?
abstract interface I{}
class Foo implements I{}
abstract class A<T extends I> {
List<T> list;
}
class B extends A<Foo> {}
Все определения работают отлично. Затем я хочу сделать следующее:
A b = new B();
List<? extends I> iList = b.list;
компилятор действительно даст мне Unchecked Assignment
предупреждение ... но почему? Не все ли из A
в списках могут быть типа <? extends I>
? b.list всегда имеет элементы, которые расширяют I, поэтому мне трудно понять, почему возникла ошибка
'A' является [необработанным типом] (http://stackoverflow.com/q/2770321/1079354) при объявлении. – Makoto
Но не все ли списки 'A' имеют тип' extends I> '? –
Нет - нет гарантии безопасности типа с необработанными типами, поэтому все, что связано с дженериками, полностью отключено от таблицы. – Makoto