Необработанные типы, неограниченный символ и ограниченный символ - PullRequest
2 голосов
/ 16 августа 2010

У меня есть быстрый вопрос, как показано ниже: Вот простые примеры по всем этим вопросам:

List a = new ArrayList();
List <?> b;
List <? extends Object> c;

Согласно Java SCJP Халида Могола (очень хорошая книга!):

a = b; // ok. Widening conversion.
b = a; // ok too. No unchecked warning.

b = c; // ok
c = b; // ok

c=a; // ok but now will issue a unchecked warning. // clause 1

Я понимаю, что любые необработанные типы (пример а) при назначении любым ограниченным ссылкам wilcard вызывают непроверенное предупреждение (поскольку содержимое этого необработанного типа a может быть любым).

Мои вопросы: поскольку c - это верхняя верхняя граница (? Расширяет объекты), разве нельзя быть в состоянии назначить c без этого предупреждения?

1 Ответ

1 голос
/ 16 августа 2010

Если я правильно понимаю ваш вопрос (и действительно не думаю, что понимаю), то, по-видимому, есть два случая, когда взаимодействие с необработанными типами может привести к появлению непроверенного предупреждения, согласно этой странице :

  • При вызове метода или конструктора необработанного типа генерируется непроверенное предупреждение, если при удалении изменяется какой-либо из типов аргументов метода или конструктора.
  • Присвоение полю необработанного типа генерирует непроверенное предупреждение (§5.1.9), если стирание изменяет тип поля.

Таким образом, ответ на ваш вопрос в основном выглядит так: « стирание может привести к непроверенным предупреждениям в присутствии необработанных типов». Насколько я могу судить, это, скорее всего, произойдет, когда используются вложенные типы - я не вижу другого места в определении стирания, которое могло бы вызвать изменение типа, но, возможно, кто-то другой может предложить, является ли это или не является источником этого.

...