Wildcardumwandlung

Gurgelhals

Neues Mitglied
Hallo liebes Java-Forum,

ich möchte in einem Java-Rahmenwerk einen Sortieralgorithums implementieren. An folgendem Problem komme ich allerdings nicht weiter:

Um den Sortieralgorithmus zu implementieren, muss ich eine von dem Rahmenwerk vorgeschriebene Klasse mit bestimmten Methoden implementieren.
In dieser Klasse befindet sich die Variable data mit dem Datentyp List<?>.

Sowie ich das verstanden habe, ist eine von den Methoden (setData) dazu da, diese Variable data mit Inhalt zu füllen, welcher später dann sortiert werden soll.

Die Methode setData bekommt als Parameter allerdings eine Collection<T> mitgeliefert.
Wenn ich nun z.B. ein Element aus dieser Collection<T> in die List<?> einfügen möchte kommt logischerweise eine Fehlermeldung, da die Generics ja irgendwie nicht zusammen passen.

folgendes ist mein nichtfunktionierender Lösungsvorschlag der Methode:
Java:
void setData(Collection<T> arg) {
this.data.addAll(arg);
[...]
}

In Zeile 2 gibt Eclipse folgendes aus: The method addAll(Collection<? extends capture#1-of ?>) in the type List<capture#1-of ?> is not applicable for the arguments (Collection<T>)

Könnt ihr mir weiterhelfen?
Ich habe wohl ein Verständnisproblem mit Generics vorallem mit diesen unknown <?>, allerdings werde ich aus den gängigen Dokumentationen auch nicht schlauer.

Vielen Dank im Voraus!
 

Marco13

Top Contributor
So einfach wie die Antwort ist, so niederschmetternd ist sie auch ;) : Man kann in eine List<?> nichts rein tun. (Punkt). D.h. man "kann" natürlich schon, aber es wird immer Warnungen und möglicherweise Fehler geben. Sicher, dass das nicht ein (Tipp)fehler ist, und eigentlich List<T> heißen sollte?
 

Gurgelhals

Neues Mitglied
So einfach wie die Antwort ist, so niederschmetternd ist sie auch ;) : Man kann in eine List<?> nichts rein tun. (Punkt). D.h. man "kann" natürlich schon, aber es wird immer Warnungen und möglicherweise Fehler geben. Sicher, dass das nicht ein (Tipp)fehler ist, und eigentlich List<T> heißen sollte?

Danke für die schnelle Antwort, aber es handelt sich leider nicht um einen Tippfehler.. ;)
Habe allerdings herausgefunden, wie eclipse jetzt das macht, was ich will
Java:
this.data = new ArrayList<T>(arg);

damit wird zwar im endeffekt auch nichts in die List<?> eingefügt, aber aus data (list<?>) eine neue ArrayList erstellt mit den Inhalten aus der Collection<T> arg.
 

Marco13

Top Contributor
Joa, das geht natürlich immer. Aber da man aus dieser List dann auch nichts anderes als "Object" herausbekommt, ist es schon komisch ???:L Nichts reinschreiben, nichts vernünftiges rauslesen... Wozu soll die gut sein? Wo und wie wird denn der Typparameter "T" sonst noch so verwendet, bzw. warum kann das keine List<T> sein? (Jaja, "das ist so vorgegeben" - ich meinte einen echten Grund ;) )
 

Neue Themen


Oben