Capturando comodines en genéricos de Java

Desdeesta Tutorial de Oracle Java:

El ejemplo de WildcardError produce un error de captura cuando se compila:

public class WildcardError {

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

Después de esta demostración de error, solucionan el problema utilizando un método auxiliar:

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));
    }
}

Primero, dicen que el parámetro de entrada de lista (i) es visto como unObject:

En este ejemplo, el compilador procesa eli parámetro de entrada como de tipo Objeto.

Porqué entoncesi.get(0) no devuelve unObject? Si ya fue pasado como tal?

Además, ¿cuál es el punto de usar un<?> cuando entonces tienes que usar un método de ayuda usando<T>. No sería mejor usar directamenteT ¿Qué se puede inferir?

Respuestas a la pregunta(1)

Su respuesta a la pregunta