Я хочу ограничить тип, передаваемый в метод, в качестве параметра снизу:
public <T super Number> void fill(T list) {}
Но IDEA мне подчеркивает, что так делать нельзя.
Хотя когда я делаю такое же ограничение сверху вот так:
public <T extends Number> void fill(T list) {}
То всё нормально работает.
В чем разница? Почему сверху я ограничение выставить могу, а такое же снизу выставить не получается? Как мне добиться нужного эффекта, используя именно <T ... >
, а не <? ... >
?
Если мы пишем <T super Number>
, то тип T
у нас может быть любым в иерархии наследования класса Number
. Притом, что мы об этих классах не знаем ничего, кроме как того, что они наследуются от Object
. Соотвественно, вызвать какие то методы напрямую у объекта типа T
у нас не получится.
Ситуация с <T extends Number>
противоположная. Мы все еще понятия не имеем какой это класс T
, но абсолютно точно знаем, что у него есть методы, которые определены в классе Number
, т.к. класс наледуется от Number
.
Следовательно, конструкция вида <T super Number>
является бессмысленной. Основной профит ее использования, это применение с параметризированными классами, например List<? super Number>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотел изменить интерфейс страницы набора номера и звонкаПерерыл везде, нигде об этом не говорится или не правильно искал
В каком виде приходит ответ от facebook, после отправки запроса
Имеется файл txt с содержимым, как сделать так что бы содержимое этого файла отображалось в таблице (tableView)?