Generics and Wildcards
Сейчас мы приступим к изучению одной из самых сложных частей в обобщениях - wildcards.
Вспомним как мы создавали стандартный generic класс:
в данном случае T - это type parameter класса ArrayList.
Создание экземпляра такого класса выглядит следующим образом:
Все четко, при объявлении параметр T задаете как Number.
Теперь вы хотите написать функцию, которая суммирует все элементы коллекции:
Но когда мы захотим передать в это функцию коллекцию вида ArrayList, то у нас возникнут проблемы. Хотя на первый взгляд все выглядит правильно. Класс у нас generic, integer вроде бы extends Number, но что-то не так. Как же решается эта проблема? Для этого и существуют wildcards. Посмотрим как это работает на примере:
Т.е. метод принимает тип ArrayList который параметризован Number или наследником Number.
Last updated