Platzhalter in Java-Generics erfassen

8

Aus Oracle Java-Tutorial:

  

Das Beispiel "WildcardError" erzeugt beim Kompilieren einen Erfassungsfehler:

%Vor%

Nach dieser Fehlerdemonstration beheben sie das Problem mithilfe einer Hilfsmethode:

%Vor%

Zuerst sagen sie, dass der Listeneingabeparameter ( i ) als Object :

betrachtet wird
  

In diesem Beispiel verarbeitet der Compiler den Eingabeparameter i als   vom Typ Objekt.

Warum gibt i.get(0) nicht Object zurück? wenn es als solches bereits übergeben wurde?

Außerdem ist es wichtig, <?> zu verwenden, wenn Sie dann eine Hilfsmethode mit <T> verwenden müssen. Wäre es nicht besser, direkt T zu verwenden, woraus geschlossen werden kann?

    
Rollerball 27.06.2013, 10:16
quelle

1 Antwort

4

List<?> bedeutet Liste von Objekten unbekannten Typs, es ist nicht dasselbe wie List<Object> .

Weil wir den Typ der Elemente in der Liste nicht kennen, wird das Ergebnis von i.get(0) von Java als Object betrachtet, und Sie können Object nicht zu List<?> hinzufügen. Für den Fall, dass Ihr Java schlauer sein könnte, aber in komplexeren Code mit <?> Wildcards, ist es einfach, es nicht sicher zu machen.

    
Mateusz D. 27.06.2013, 11:12
quelle

Tags und Links