Erfassen von Platzhaltern in Java-Generika

Vondiese Oracle Java Tutorial:

Das WildcardError-Beispiel erzeugt beim Kompilieren einen Erfassungsfehler:

public class WildcardError {

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

Nach dieser Fehlerdemonstration beheben sie das Problem mithilfe einer Hilfsmethode:

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

Erstens sagen sie, dass die Liste Eingabeparameter (i) wird alsObject:

In diesem Beispiel verarbeitet der Compiler diei Eingabeparameter vom Typ Object.

Warum danni.get(0) gibt keinen zurückObject? ob es schon als solches übergeben wurde?

Darüber hinaus, was ist der Sinn der Verwendung von a<?> Wenn Sie dann eine Hilfsmethode verwenden müssen, verwenden Sie<T>. Wäre nicht besser direkt zu nutzenT was kann gefolgert werden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage