- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 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);
}
}
А тебе зачем?
Я наконец догадался! Ответ: строчки с ошибками!
крестоблядство уже до жабы добралось
Пиши тест сам. А то примут тебя на работу, а ты джаву не знаешь :) Неприятно будет и тебе и работодателю.
> Какие строки вызовут ошибку компиляции?
Скомпилируй, узнаешь ;)
P.S. ГК - не твоя личная армия.
P.P.S. Держи отличный FAQ от Анжелики Лагнер: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html Там есть нужная тебе инфа.
Да хоть хуём назови... По крайней мере я не превращаю говнокодик в филиал ответов@майл.ру или стековерфлоу, в отличие от некоторых...
В чем суть вопроса то?
Хотел узнать какие строки вызовут ошибку? - Скомпилируй и увидишь.
Хотел узнать почему именно эти? - Кури ссылку, которую я тебе кинул.
Компилятор говно, и работает неправильно? - Напиши нам об этом, это интересно.
Решил проверить наши знания? - вали нахрен, это не тот ресурс.
Это "Пять".
>Какие строки вызовут ошибку компиляции?
забавный вапрос?
>Ты что, совсем дурачок?
Еще более забавный вапрос?
Выложи лучше на хеш-коде или стекОверфлоф.
> забавный вапрос?
> Еще более забавный вапрос?
Лопата.
интересно откуда автор выдрал этот пример.
А ответ, имхо, вполне очевидный...
В 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'ы.