В аргументах типа Java <? расширяет E> имеется ввиду только подтипы? или E также будет достаточно? - PullRequest
8 голосов
/ 29 июня 2010

В аргументах типа Java означают только строго подтипы? или E также будет достаточно?

Ответы [ 3 ]

7 голосов
/ 29 июня 2010

Это не строгое;E будет достаточно.

6 голосов
/ 29 июня 2010

Да, super и extends дают включительно нижнюю и верхнюю границы соответственно.

Вот цитата из Часто задаваемые вопросы об Анжелике Лангер :

Что такое ограниченный шаблон?

Подстановочный знак с верхней границей выглядит как ? extends Type и обозначает семейство всех типов, которые являются подтипами Type, тип Type, являющийся включенным . Type называется верхней границей .

Подстановочный знак с нижней границей выглядит как ? super Type и обозначает семейство всех типов, которые являются супертипами Type, типа Type, являющегося включенным . Type называется нижней границей .

1 голос
/ 29 июня 2010
List<? extends Animal> animalList=new List<Dog>();
List<? extends Animal> animalList=new List<Animal>();

Обе строки компилируются без ошибок.Любая функция, принимающая список в качестве параметра, понимает, что объекты в списке относятся к типу E или подтипу E.

...