В аргументах типа Java, действительно означает строго подтипы только? или E был бы также достаточен?
Да, super
и extends
дают инклюзивные нижнюю и верхнюю границы соответственно.
Вот цитата из Angelika Langer's Generics FAQ:
Что такое ограниченный подстановочный знак?
Подстановочный знак с верхней границей выглядит как
? extends Type
и обозначает семейство всех типов, которые являются подтипамиType
, типType
является included.Тип
называется верхней границей.Подстановочный знак с нижней границей выглядит как
? super Type
и обозначает семейство всех типов, которые являются супертипамиType
, типType
является included.Тип
называется нижней границей.
List<? extends Animal> animalList=new List<Dog>();
List<? extends Animal> animalList=new List<Animal>();
Обе строки компилируются без ошибок. Любая функция, принимающая список в качестве параметра, понимает, что объекты в списке относятся к типу E или подтипу E.