Eigene Objekte in Listen speichern und auslesen?
Daniel
- java
0 Slyh0 Dimitri Rettig0 Daniel Thoma0 Slyh
Hallo!
Ich habe ein kleines Problem mit den Listen in Java.
Und zwar habe ich eine Klasse, zb Auto:
class Auto {
//Objektzustände
private String Marke;
private int Baujahr;
//Hier werden in einer Liste alle neu angelegten Autos gespeichert
static List AutoList = new ArrayList();
public addAuto(String Marke,int Baujahr){
AutoList.add(new Auto());
setMarke(Marke);
setBaujahr(Baujahr);
}
public void setMarke(String Marke){
this.Marke = Marke;
}
public void setBaujahr(String Baujahr){
this.Baujahr = Baujahr;
}
public getAuto(int index){
//Hier möchte ich dann die Werte auslesen
}
}
Ich weiss nicht inwieweit die Objekte richtig gehandlet werden mit der Liste, aber soweit ich herausgefunden habe, werden die Objekte in der Liste auch nur als Referenz gespeichert, und wenn ich das Objekt, bzw eine Eigenschaft, zb Marke ausgeben will bekomme ich immer die Objektreferenz geliefert.:
AutoList.get(AutoList.size()-1); ->Referenz
Die Frage lautet nun: Wie kann ich denn auf die gespeicherten Obekte und Methoden in der Liste zugreifen?
Danke,
Daniel
Hallo,
du hast dir da eine recht interessante Struktur gebastelt: Die Liste
mit den Auto-Objekten als statisches Objekt in den Auto-Klassen selbst
zu speichern halte ich für nicht sehr schön.
Außerdem kann es passieren -- und ich hoffe, ich erinnere mich
korrekt -- daß der Garbage Collector irgendwann einfach mal deine
ArrayList "AutoList" wegwirft, da keine (externe) Referenz auf diese
existiert.
(Zumindest meine ich mich an einen Fall erinnern zu können, in dem
dies passiert ist. Das ist leider schon ein Weilchen her, so daß meine
Erinnerung nicht mehr ganz so frisch ist. Es könnte auch ein anderer
Effekt bei statischen Variablen gewesen sein.)
class Auto {
//Objektzustände
private String Marke;
private int Baujahr;
Du solltest Variablen in Java immer klein schreiben, damit auf einen
Blick zwischen Klassen- und Variablennamen unterschieden werden kann.
//Hier werden in einer Liste alle neu angelegten Autos gespeichert
static List AutoList = new ArrayList();public addAuto(String Marke,int Baujahr){
Was für einen Rückgabewert hat diese Methode? Da fehlt wohl ein "void"
nach "public". Außerdem sollte die Methode statisch sein, da du ja
auf die statische Liste zugreifst, die mit der konkreten Auto-Klasse
nichts zu tun hat.
(Wie gesagt, deine Struktur ist sehr seltsam.)
AutoList.add(new Auto());
setMarke(Marke);
setBaujahr(Baujahr);
}public void setMarke(String Marke){
this.Marke = Marke;
}public void setBaujahr(String Baujahr){
this.Baujahr = Baujahr;
}public getAuto(int index){
Auch hier fehlt der Rückgabewert. Vermutlich "Auto".
Außerdem sollte auch diese Methode statisch sein.
//Hier möchte ich dann die Werte auslesen
}}
Ich weiss nicht inwieweit die Objekte richtig gehandlet werden mit der Liste,
Wie willst du es denn?
aber soweit ich herausgefunden habe, werden die Objekte in der Liste auch nur als Referenz gespeichert,
Es wird nur eine Referenz in der Liste gespeichert, ja.
und wenn ich das Objekt, bzw eine Eigenschaft, zb Marke ausgeben will bekomme ich immer die Objektreferenz geliefert.:
Das verstehe ich nicht.
AutoList.get(AutoList.size()-1); ->Referenz
Ja, das liefert -- sofern du den Rückgabewert noch richtig angibst --
eine Referenz auf das letzte Auto-Objekt in der Liste.
Die Frage lautet nun: Wie kann ich denn auf die gespeicherten Obekte und Methoden in der Liste zugreifen?
Mir ist nicht ganz klar, was du meinst. Meinst du evtl. sowas?
Auto.getAuto(12).getMarke();
Dann fehlt aber noch die Methode "getMarke()":
public String getMarke()
{
return Marke;
}
Wenn nicht, was meinst du dann?
Deine Struktur ist wirklich nicht so toll. Schmeiß diese AutoList
aus deiner Auto-Klasse raus. Die hat da nichts verloren. Erstelle
zur Verwaltung der Autos eine eigene Klasse oder mach die Verwaltung
direkt in einer deiner anderen bestehenden Klassen rein.
Für den 1. Fall:
public class AutoListe
{
List autos = new ArrayList();
public void addAuto(Auto auto)
{
autos.add(auto);
}
public Auto getAuto(int index)
{
return autos.get(index);
}
}
(Ungetesteter Code. Könnte Fehler enthalten.)
Gruß
Slyh
hallo,
public class AutoListe
{
List autos = new ArrayList();
// ich würde hier noch private hinzufügen (wenn die Liste wirklich privat ist):
private List autos = new ArrayList();
public void addAuto(Auto auto) ...
mit freundlichen grüßen
dimitri rettig
Hallo Slyh,
public Auto getAuto(int index)
{
return ((Auto)autos).get(index);
}
}
An der Stell muss man leider (noch) casten.
Grüße
Daniel
Hallo,
public Auto getAuto(int index)
{
return ((Auto)autos).get(index);
}
}
An der Stell muss man leider (noch) casten.
Hast (prinzipiell) recht. Aber wenn casten, dann auch richtig. *g*
return (Auto)autos.get(index);
(Du hast die Arrayist nach "Auto" gecastet.)
Gruß
Slyh
Hallo Slyh,
return (Auto)autos.get(index);
(Du hast die Arrayist nach "Auto" gecastet.)
Äh ja natürlich muss man den Rückgabewert casten.
Grüße
Daniel