Liste & lt; erweitert MyType & gt;
Ich habe eine Java-Frage zu generics. Als ich erklärte, dass eine generische Liste:
List<? extends MyType> listOfMyType;
Dann in einige Methode, die ich versuchen, zu instanziieren, und fügen Sie Elemente in die Liste ein:
listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance);
Wo myTypeInstance
ist nur ein Objekt vom Typ MyType
; es wird nicht kompiliert. Es sagt:
Die Methode add(capture#3 -? erweitert
MyType) in der Liste Typ<capture#3-der
? erstreckt sich MyType> ist nicht anwendbar
für die Argumente (MyType)
Irgendeine Idee?
InformationsquelleAutor der Frage Lancelot | 2009-05-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht tun, eine "put" - mit erstreckt . Blick auf Generika - Get und Put Regel.
InformationsquelleAutor der Antwort Surya
Betrachten:
sub
enthält nun eineMyType
die ist sehr falsch.InformationsquelleAutor der Antwort Tom Hawtin - tackline
Sollten Sie nicht brauchen, um verwenden Sie das wildcard-capture-syntax in deinem Fall einfach erklären
sollte genug sein. Wenn Sie genau wissen wollen, warum die Java Generics-Tutorial hat mehr als Sie jemals wissen wollen über die esoterische Verrücktheit von Java Generics. Seite 20 Adressen für Ihren konkreten Fall.
Als für warum sollten Sie mit der wildcard capture funktioniert nicht, es ist, weil der compiler kann nicht feststellen, genau das, was Unterklasse von MyType wird die Liste in jedem Fall, so dass der compiler gibt eine Fehlermeldung.
InformationsquelleAutor der Antwort Cameron Pope
Gibt es einen ähnlichen thread hier:
Wie können Elemente Hinzugefügt werden, um eine wildcard generischen collection?
Um eine Idee zu bekommen, wie generics arbeitet, überprüfen Sie heraus dieses Beispiel:
Die Sache ist, dass nicht für die lokale/member-Variablen, aber für die Funktion der Unterschriften, das ist, warum es ist so Arsch-rückwärts.
InformationsquelleAutor der Antwort zslevi
Ich weiß nicht, ob dies wird Ihnen wirklich helfen, aber das ist etwas, was ich hatte, zu verwenden beim Aufruf einer generischen Methode des Spring Framework und wollen, um zurückzukehren auch eine generische Liste:
Scheint die Parametrisierung braucht, Sie nutzen die ? Zeichen in der Liste aus, um die Ergebnisse erhalten Sie, und dann warf die Liste der erwarteten Rendite geben.
Iam immer noch geblendet von Generika...
InformationsquelleAutor der Antwort will824