ich habe ein Problem mit diesen <T> Generics ,um mein Problem etwas präziser zu formulieren gebe ich mal ein Beispiel :
Java:
public<T>List<T>getData(){return data;}
Das ist eine Methode einer abstrakten Klasse die ich implementieren soll. Ich soll mit dieser Methode nur die Liste data ausgeben die als Variable mitvererbt wurde ,wenn ich jetzt aber return data schreibe funktioniert das nicht ,wegen diesem <T> . Er gibt mir als Fehlermeldung : Cannot convert from List<capture#1 -of ?> to List<T>.
Ich habe aber so eine Verwendung der Generics noch nie gesehen ,welche auch nicht in der Vorlesung erwähnt wurden. Wie geh ich mit dieser Vorgabe um ? Was muss ich dabei beachten ? Kann ich für dieses T irgendwas vorgeben ?
Nur ein <T> reicht nicht, und man muss das <T> auch nicht in die Klassendeklaration hochziehen. Wenn man es vor die Methode schreibt, ist das quasi eine "lokale" Typdefinition. Sowas wie
Java:
public<T>List<T>getList(){List<T> list =newArrayList<T>();...return list;}
würde gehen. Für das Compable-Beispiel heißt das: Dort kann jede beliebige List übergeben werden, bei der das 'T' entsprechend Comparable ist...
Aber wie beziehe ich jetzt meine Klassenvariable data ein ?
data
protected java.util.List<?> data
The list to be sorted.
Der gibt mir dann immer die Fehlermeldung ,dass die List<T> liste nicht verwendbar is für die data-Elemente. Wie krieg ich die da rein bzw. wie kann ich data nun ausgeben ?
Ach so, das ging irgendwie im ersten Post etwas unter... dann eigentlich doch so wie faetzminator angedeutet hat, aber poste ggf. mal ein Stück vom tatsächlichen Code - wie ist 'data' denn deklariert?
Naja das Problem ist ,dass es sich hierbei um eine Klasse SelectionSort handelt .Wir sollen also eine beliebige Liste damit sortieren können. Es ist eine abstrakte Klasse "AbsSort" mit ein paar Methoden unter anderem den beiden die ich oben genannt habe vorgegeben. Den Alghoritmus SelectionSort zu programmieren wird kein Problem sein. Das eigentliche Problem was ich habe sind diese T's.
Und zu den Variablen steht in der Javadoc nur :
protected java.util.Comparator<?>
com
The current comparator that is set with the setData-method.
protected java.util.List<?>
data
The list to be sorted.
Jetzt soll man mit der Methode die ich oben gepostet habe data ausgeben ,aber ich weiss leider nicht wie das funktionieren soll mit diesen <T>s. Mehr ist da nicht angegeben : / .
edit : Ich programmier mit Eclipse 3.7.2 noch nicht allzu lange.