Очень нужна помощь...
Не могу понять вот эти вопросы:
1. чем отличаются вот эти 2 дженерика
<T extends MyClass>
<? extends MyClass>
2. Окончательно путаюсь вот в этом.
Если у нас есть вот такое
<? extends MyClass>
то мы можем только читать оттуда, а добавлять ничего нельзя? При этом при чтении придется вызывать Object?
for (Object pp : list) {
System.out.println(pp);
}
Зачем мы это используем?
3. Главный вопрос
Есть вот такой код, он работает как-то
List<Parent> p = new ArrayList<>();
p.add(new Parent());
List<? super Child> list = new ArrayList<>();
list = p;
list.add(new Child());
list.add(new ChildChild());
list.add((Child) new Parent());
for (Object pp : list) {
System.out.println(pp);
}
Почему мы можем напрямую (через метод add() ) добавлять только потомков, хотя у нас стоит <? super> ?
Почему при этом мы можем все равно добавить класс-родитель?
В общем, уже совсем ничего не понимаю, help !!!!!