Список перехвата 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 вместо?, Просто интересно, почему компилятор не делает это для меня.

Ответы на вопрос(3)

Ваш ответ на вопрос