1. Java / Говнокод #13962

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    public class SimpleTest {
        class A {}
        class B extends A {};
        class C extends B {};
    
        public void doIt() {
            A a = new A();
            B b = new B();
            C c = new C();
    
            List<B> lst = new ArrayList<B>();
            lst.add(a);
            lst.add(b);
            lst.add(c);
    
            a = lst.get(0);
            b = lst.get(0);
            c = lst.get(0);
    
            List<? extends B> lstExtends = lst;
            lstExtends.add(a);
            lstExtends.add(b);
            lstExtends.add(c);
    
            a = lstExtends.get(0);
            b = lstExtends.get(0);
            c = lstExtends.get(0);
    
            List<? super B> lstSuper = lst;
            lstSuper.add(a);
            lstSuper.add(b);
            lstSuper.add(c);
    
            a = lstSuper.get(0);
            b = lstSuper.get(0);
            c = lstSuper.get(0);
        }
    }

    Какие строки вызовут ошибку компиляции?

    Запостил: huitka, 16 Октября 2013

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

    • Поверхностное знакомство с Жабой и здравая интуицая спасовали перед выхлопом компилятора. [summon]Кэп[/summon].
      Ответить
    • >Какие строки вызовут ошибку компиляции?
      А тебе зачем?
      Ответить
    • > Какие строки вызовут ошибку компиляции?

      Я наконец догадался! Ответ: строчки с ошибками!
      Ответить
    • 12. Если не гоню
      Ответить
    • class B extends A {};
      class C extends B {};

      крестоблядство уже до жабы добралось
      Ответить
    • > Какие строки вызовут ошибку компиляции?
      Пиши тест сам. А то примут тебя на работу, а ты джаву не знаешь :) Неприятно будет и тебе и работодателю.

      > Какие строки вызовут ошибку компиляции?
      Скомпилируй, узнаешь ;)

      P.S. ГК - не твоя личная армия.

      P.P.S. Держи отличный FAQ от Анжелики Лагнер: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html Там есть нужная тебе инфа.
      Ответить
      • показать все, что скрытоТы что, совсем дурачок?
        Ответить
        • > Ты что, совсем дурачок?
          Да хоть хуём назови... По крайней мере я не превращаю говнокодик в филиал ответов@майл.ру или стековерфлоу, в отличие от некоторых...

          В чем суть вопроса то?
          Хотел узнать какие строки вызовут ошибку? - Скомпилируй и увидишь.
          Хотел узнать почему именно эти? - Кури ссылку, которую я тебе кинул.
          Компилятор говно, и работает неправильно? - Напиши нам об этом, это интересно.
          Решил проверить наши знания? - вали нахрен, это не тот ресурс.
          Ответить
          • >Решил проверить наши знания? - вали нахрен, это не тот ресурс.
            Это "Пять".
            Ответить
        • забавний ник.

          >Какие строки вызовут ошибку компиляции?
          забавный вапрос?

          >Ты что, совсем дурачок?
          Еще более забавный вапрос?

          Выложи лучше на хеш-коде или стекОверфлоф.
          Ответить
          • > забавний ник.
            > забавный вапрос?
            > Еще более забавный вапрос?
            Лопата.
            Ответить
            • да, она мне бы сейчас сильно помогла-бы).

              интересно откуда автор выдрал этот пример.
              Ответить
    • Писал, чтобы проверить себя, и понравилась неочевидность ответа на казалось бы простой вопрос, если не запомнить пару правил ( http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs ) .
      Ответить
      • Ну вот с этого и надо было начинать :)

        А ответ, имхо, вполне очевидный...

        В List<? extends B> может лежать что-то из List<C> или List<B> (а может и вообще List<D> если D extends B). Поэтому если мы в нее что-то вставим, то может случиться, что мы в List<C> засунем B. Что совсем не айс. Поэтому тут не пашут add'ы.

        В случае с List<? super B> мы имеем либо List<A> либо List<B>. Поскольку в List<A> могут оказаться A, мы не можем вынуть элемент как B. Поэтому тут не пашут get'ы.
        Ответить
    • Взяв сильно руками меня за булки, он их растянул в стороны и, придвигая к себе, начал вставлять член в мою попку... Было больно, но его это не останавливало. Когда член полностью вошёл в меня, он остановился на пару секунд... Обхватив меня и взяв поудобней, он начал трахать меня в попку, как шлюшку, а второй продолжал ебать меня в рот. Так длилось минут 40... Потом они поменялись местами и продолжили ебать меня в обе дырочки, как последнюю шалаву.
      Ответить

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