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?