Przechwytywanie symboli wieloznacznych w generycznych wersjach Java

Zto Samouczek Oracle Java:

Przykład WildcardError powoduje błąd przechwytywania podczas kompilacji:

public class WildcardError {

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

Po tej demonstracji błędu rozwiązują problem za pomocą metody pomocniczej:

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

Po pierwsze mówią, że parametr wejściowy listy (i) jest postrzegany jakoObject:

W tym przykładzie kompilator przetwarzai parametr wejściowy jako typ obiektu.

Dlaczego więci.get(0) nie zwracaObject? jeśli był już przekazany jako taki?

Ponadto jaki jest sens używania<?> kiedy musisz użyć metody pomocniczej<T>. Nie byłoby lepiej używać bezpośrednioT co można wywnioskować?

questionAnswers(1)

yourAnswerToTheQuestion