Hallo liebe Leute,
ich habe eine allgemeine Frage zu Generics. Wenn ich ein Programm wie das unten habe, wie kann ich damit wirklich arbeiten? Ich wollte
einen SortedList<String> list erstellen. Daraufhin wird gesagt, dass String nicht kompatibel mit T ist. Aufgrunddessen habe ich alle T's zu Strings geändert. Als ich versuchen wollte, Buchstaben mit der add Methoden in data zu speichern, meldet der Compiler, dass java.lang.String nicht kompatibel mit String sei. Kurz gesagt: Wie kann ich mit einem solchen Programm eine Liste mit Buchstaben/Wörtern erstellen und dabei die Methoden add und remove verwenden? Ich bin leider ein Anfänger und bin aus den Beiträgen im Internet nicht wirklich weitergekommen. Es würde mich enorm freuen, falls ich mich aufklären könnt.
Code:
class SortedList<T extends Comparable<T>> {
T[] data = (T[]) new Comparable[100];
int nElements = 0;
void add(T elem) {
int i = nElements -1;
while(i >= 0 && elem.compareTo(data[i])>0) {
data[i+1] = data[i];
i--;
}
data[i+1] = elem;
nElements++;
}
T remove() {
return data[--nElements];
}
}
Ich glaube, es liegt daran, dass ich nicht genau weiss, wie man eine Instanz von SortedList für Strings erstellt.
Meine Idee war eben:
SortedList<String> list = new SortedList<String>();
list.add("a");
Ich glaube, es liegt daran, dass ich nicht genau weiss, wie man eine Instanz von SortedList für Strings erstellt.
Meine Idee war eben:
SortedList<String> list = new SortedList<String>();
list.add("a");
Nochmal meine Frage: Du hast nicht zufälligerweise eine eigene String Klasse geschrieben? Und als du es mit dieser probiert hast, hat diese nicht Comparable implementiert?
Einmal habe ich das so ausprobiert und im nachhinein erst gelesen, dass das so nicht funktioniert. Später habe ich es dann zur alten Form geändert.
Wenn ich es so, wie ich oben erwähnt habe, list erstelle, steht dann:
type argument java.lang.String is not within Bounds of type variable T.
Schreib doch bitte einfach immer in jedem Post den aktuellen vollständigen Code und nicht Sätze wie "Einmal habe ich das so ausprobiert und im nachhinein erst gelesen, dass das so nicht funktioniert. Später habe ich es dann zur alten Form geändert." Da weiß niemand mehr, wie dein jetziger Code eigentlich aussieht und alle müssen aus vorherigen Posts erst mühsam den aktuell vermutlichen Code herausklamüsern. Und bei Fehlermeldungen einfach auch immer die Stelle im Code hervorheben, für die der Fehler angezeigt wird.
Das habe ich mal gemacht und mein funktionierender Code sieht nun so aus:
Java:
classSortedList<TextendsComparable<T>>{T[] data =(T[])newComparable[100];int nElements =0;voidadd(T elem){int i = nElements -1;while(i >=0&& elem.compareTo(data[i])>0){
data[i +1]= data[i];
i--;}
data[i +1]= elem;
nElements++;}Tremove(){return data[--nElements];}// Benutzung: Funktioniert!publicstaticvoidmain(String[] args){SortedList<String> list =newSortedList<String>();
list.add("a");}}
Vielen vielen Dank an dich. Ich habe zuvor mit BlueJ programmiert. Auch bei deinem Quellcode hat dieser die Fehlermeldung "type argument java.lang.String is not within Bounds of type variable T" angezeigt. Ich habe es nun mit einer anderen Java-Umgebung ausprobiert und da funktioniert es! Ich möchte mich ganz herzlichst bei dir bedanken, dass du dir so viel Zeit genommen hast!