Jawa / Говнокод #26206 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 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());
   }

}

АААА... кто-нибудь знает почему нельзя добавить объект С1835 в список? Как это обойти?

Запостил: mozga mozga, (Updated )

Комментарии (4) RSS

  • Ограничения дженериков. Класть можно в ? super x, доставать из ? extends x
    Почему так?
    Пример -
    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. Таким образом ты нарушить типовую безопасность, которую и должны гарантировать дженерики
    Ответить
    • ага) я это запомнил так. Если ?super, то можно класть все что равно и ниже. Если ?exteds то ничего нельзя. Только извлекать.
      Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8