Typverlust bei Java-Listen

Hi Leute,
ich habe ein Problem:
Ich versuche ein Java-Programm zu schreiben, in dem eine Liste vorkommt. In dieser Liste sind jetzt 50 Elemente von einem Typ. Diese Elemente muss ich später nochmal benutzen, wenn ich sie aber aufrufe, haben sie ihre typenspezifischen Dienste verloren.

(Beispiel: Ich habe Elemente vom selbsterstellten Typ „Skispringer“. Zurückgegeben werden sie mir aber als Elemente des Typs „Object“. Daher haben sie die Dienste, die mein Skispringer hat verloren.)

Weiß vielleicht jemand, wie ich dieses Problem lösen kann?

Gruß und Dank im Voraus
Daniel

Hi…
Du musst wahrscheinlich die Objekte zurück casten.

((Skispringer) obj).getSki();

oder so ähnlich.
Die Liste sollte ebenfalls schon typisiert angelegt werden.

Hast Du die Liste auch „Typisiert“?
Also wenn Du sowas hier probierst:

ArrayList l = new ArrayList();
String name = „Bob“;
l.add(name);
System.out.println(l.get(0).charAt(1)); // prints „o“

Dann klappt das eigentlich. Oder habe ich Deine Frage falsch verstanden. Hast Du irgendwo Code zum zeigen??
Oder hast Du die Liste selbst geschrieben? Vielleicht ist da einfach statt des generischen Typs nur Object als return-Wert.
Naja, schwer ohne code. Sorry…
Hoffe, es hilft Dir trotzdem.

Danke erstmal für die schnelle Antwort. Wie legt man denn eine typisierte Liste an? Das ist mir nämlich neu…

Gruß
Daniel

Ein Beispiel mit ArrayList
Die Klasse ArrayList implementiert das Interface List. Ich vermute, Du hast auch eine Klasse gewählt, die das Interface List implementiert.

Skifahrer skifahrer1 = new Skifahrer();

ArrayList skifahrerListe = new ArrayList();

skiFahrerListe.add(skifahrer);

[irgendwann später]

Skifahrer ersterSkifahrer = (Skifahrer) skiFahrerListe.get(0);

Das sollte eigentlich zu einer

Ah, alles klar!
Ich danke dir vielmals!

Gruß
Daniel

Hallo,

Ich versuche ein Java-Programm zu schreiben, in dem eine Liste
vorkommt.

Was für eine Liste? List ist ein Interface, wie implementierst du oder benutzt du eine von den Klassen, die das bereits implementiert haben (siehe Link)?
http://docs.oracle.com/javase/6/docs/api/java/util/L…

In dieser Liste sind jetzt 50 Elemente von einem
Typ. Diese Elemente muss ich später nochmal benutzen, wenn ich
sie aber aufrufe, haben sie ihre typenspezifischen Dienste
verloren.

Wie erzeugst du deine Liste? Eine ArrayList wäre wie folgt anzulegen:
ArrayList myList = new ArrayList();

Jede Liste speichert halt Objekte. Wenn du nicht sagst, welcher Typ, dann ist das Objekt als Obermutter aller zuständig.

Falls das nicht hilft, bitte Code schicken.

Hallo Daniel,

eine Möglichkeit ist zu versuchen es um zu casten:

Skispringer temp = (Skispringer) liste.get(0);

Gruß Steffen

Hi Daniel.

Du hast zwei Möglichkeiten:

  1. Du verwendest eine generische Liste (siehe auch Generics) und zwar wie folgt:

ArrayList listeVonSkispringern = new ArrayList();
//ganz viel deines Codes
Skispringer springer = listeVonSkispringern.get(0);

  1. Du „weißt“ das nur Skispringer in der Liste sind und castest (von engl. to cast) einfach:

ArrayList auchEineListeVonSkispringern = new ArrayList();
//ganz viel deines Codes
Skispringer auchEinSpringer = (Skispringer) auchEineListeVonSkispringern.get(0);

Viele Grüße,

Thomas aka. Daniel :wink:

Hallo Daniel,
ich vermute mal du hast etwas in der Art geschrieben:
//Liste erstellen
List springer = new ArrayList();
//SkiSpringer hinzufügen
springer.add(new SkiSpringer());
springer.add(new SkiSpringer());

//drüber iterieren
for (int i=0; i springer = new ArrayList();

Innerhalb der For-Schleife kannst du dann das Objekt direkt wieder rausholen:
SkiSpringer skispringer = springer.get(i);

Ich hoffe das hilft weiter.

Viele Grüße,
Sandra

Hallo,
leider kenn ich mich in Java nur so gut aus, wie wir es in der Schule lernen. Da wir noch nie Listen behandelt haben fällt mein Wissen diesbezüglich eher mäßig aus :smile: Aber soweit ich weiß kann man Listen einen bestimmten Typ zuweisen, in deinem Fall z.B.:
List DeineListe = new ArrayList();

Dafür auch ein Link: http://www.exampledepot.com/egs/java.util/coll_Creat…

Mehr kann ich dir aber leider auch nicht helfen…

Gruß
SPN

Hej,

es gibt wahrscheinlich mehrere Möglichkeiten, dein Problem zu lösen:

  1. Generics:

    Listjumpers=new ArrayList();
    //befüllen

    Skispringer jumper1=jumpers.get(0);

  2. Casten von Object auf Skispringer:

    List list=new ArrayList();
    //etc

    Skispringer jumper=(Skispringer)list.get(0);

Besser sind Generics (siehe auch hier)

Gruß Mobbmaster

Ist völlig richtig, das ganze läuft jetzt - danke!
Gruß
Daniel

Danke, das war die Lösung!
Gruß
Daniel

Ne, das hat nicht geklappt…
Trotzdem danke, habe mittlerweile auch eine Lösung erhalten.
Gruß
Daniel

Das erste war der Schlüssel zum Erfolg! :wink:
Das zweite habe ich auch versucht, aber irgendwie nicht auf die Kette gekriegt, macht aber nichts - es läuft ja!
Danke
Daniel

Absolut richtig, danke!
Das war sowohl genau das, was ich bereits geschrieben habe, als auch die perfekte Lösung, klasse!
Danke
Daniel

Völlig richtig, jetzt läufts!
Danke
Daniel

Ich habs über die Generics gemacht und jetzt gehts.
Danke
Daniel

Hallo Daniel,

kannst Du vielleicht den Src-Code posten?