Объясните, пожалуйста, разницу между <T> и <?>?
Elena Vasilyeva
35 уровень
В чем отличие <T> от <?>?
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений
31 марта 2022, 22:19решение
вот всё объяснили.
<T> - определенный тип. Так объявленный джинерик инвариантен к приведению типа (мы не можем привести List<Integer> к List<Number> несмотря на то что Integer к Number можем).
Объекты так параметризованные открыты на чтение/запись. Из мешка с котами мы достаем котов и кладем котов.
<?> - равносильно <? extends Object> - параметр типа - подтип Object - т.е. по сути любой тип.
Объекты объявленные как <? extends Т> ковариантен к приведению типа (мы можем привести к List<?> любой List<ClassName> где ClassName наследник T, для Т - Object - любой ссылочный тип).
Объекты объявленные как <? extends Т> доступны только на чтение. (Нам дали мешок с животными (но мы не знаем коты там или щенки) из него мы достаем животное, но т.к. мы не знаем с чем мешок (коты или щенки) - нам запретили в него что-то складывать).
+6
hidden #598481
1 апреля 2022, 07:39
"Вам достаётся кот в мешке".
Лаконично и всё по делу расписал.
0