Захват подстановочных знаков в дженериках Java

Изэто Oracle Java, учебник:

Пример WildcardError создает ошибку захвата при компиляции:

public class WildcardError {

    void foo(List<?> i) {
        i.set(0, i.get(0));
    }
}

После этой ошибки они решают проблему с помощью вспомогательного метода:

public class WildcardFixed {
    void foo(List<?> i) {
        fooHelper(i);
    }

    // Helper method created so that the wildcard can be captured
    // through type inference.
    private <T> void fooHelper(List<T> l) {
        l.set(0, l.get(0));
    }
}

Сначала говорят, что входной параметр списка (i) рассматривается какObject:

В этом примере компилятор обрабатываетi входной параметр имеет тип объекта.

Тогда почемуi.get(0) не возвращаетObject? если это уже было передано как таковое?

Кроме того, какой смысл использовать<?> когда тогда вы должны использовать вспомогательный метод, используя<T>, Не лучше было бы использовать напрямуюT что можно сделать вывод?

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

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