- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
public class C1834 { }
class C1835 extends C1834 { }
public class C1836 {
public void m5(ArrayList<? extends C1834> strList)
{
List<? extends C1834> list = new ArrayList<>();
list.add(new C1835());
}
}
the-alator 13.12.2019 11:36 # 0
Почему так?
Пример -
Class A, class B extends A, class C extends A.
Допустим, в метод, параметром которого является List<? extends A> придёт List<B>, или может прийти любой другой лист, тип которого extends A.
В данном случае B extends A, все ок.
1. Если ты будешь вытаскивать элементы из такого списка, они гарантированно будут extends A.
2. Теперь по поводу помещения элементов в список. У тебя пришёл список типа B, но виден он под дженериком ? extends A. Если ты попробуешь положить в него C, то получится что ты положишь C в список типа B. Но B extends A, но не C. Таким образом ты нарушить типовую безопасность, которую и должны гарантировать дженерики
mozga 13.12.2019 14:03 # 0
Fike 13.12.2019 14:32 # 0
zhigolo 13.12.2019 17:34 # +1