Список перехвата Java Generics <?>
Я смотрел наДокументация по Java Generics и нашел этот кусок кода,
public class WildcardError {
void foo(List<?> l) {
//This give a compile time error
l.set(0,l.get(0));
}
}
Я могу понять, что мы выбираем элемент изList<?>
и пытается установить его на другойList<?>
, Так что компилятор выдает ошибку. У меня вопрос, это имеет смысл, когда 2 списка разные, т.е.l.set(0, m.get(0))
здесь спискиl
а такжеm
разные. Но в приведенном выше примере,l
а такжеl
такие же списки. Почему компилятор не настолько умен, чтобы это увидеть? Это сложно реализовать?
Edit:
I am aware that I can fix it by a helper method or by using T
вместо?
, Просто интересно, почему компилятор не делает это для меня.