PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Objekte wiederfinden


Crashman
15.05.2004, 12:55
Hallo,

ich hab einen vorgegebenen Programmcode den ich etwas erweitern soll.
Der Programmcode legt an einer Stelle 3 Objekte einer Klasse an. Wie kann ich die Klasse fragen welche Objekte zu ihr gehören, um danach jedes Objekt nach einer Eigenschaft zu fragen ?

MfG

Sargnagel
15.05.2004, 13:47
Also, meines Wissens nach kannst Du nur ein Objekt fragen, von welcher Klasse es eine Instanz darstellt (instanceof).

Crashman
15.05.2004, 13:59
Aso.

Okay. Wie realisiere ich dann in einer Klasse einen Zähler, der die von ihr instanziierten Objekte in eine Datenstruktur (Liste, Collection...erstmal egal) ablegt ?

MfG

Sargnagel
15.05.2004, 14:09
Wenn Du eine Klasse instanziierst, wird der Konstruktor dieser Klasse aufgerufen. Also schreibst Du eine zusätzliche Methode, die zum einen einen Zähler, der bei jedem Konstuktorauffruf um 1 inkrementiert wird, verwaltet und zum anderen eine Referenz auf das angelegte Objekt in eine Liste (o.ä.) aufnimmt. Diese Methode(n) rufst Du dann einfach über den Konstruktor der Klasse auf.


Problematisch könnte es werden, wenn Du es mit Vererbung zu tun hast. Da bei jeder Instanziierung auch implizit der Konstruktor der Superklasse aufgerufen wird (wirklich immer?), müßte man sich in diesem Fall vielleicht mal überlegen, ob das ungewollte Auswirkungen haben könnte, wenn auch in der Superklasse eine solche o.a. Methode aufgerufen würde, obwohl nur die Unterklasse instanziiert wird. *blabla*
Vielleicht haben ein paar andere wesentlich erfahrenere Java-Programmierer eine Lösung parat.

Crashman
15.05.2004, 14:39
Ich habe jetzt ein Static Attribut (ArrayList) angelegt. Dort sollen die Objekte rein.
Der Konstruktor wird aufgerufen und dieser wiederum ruft eine Methode auf, die das erstellte Objekt in die Liste eintragen soll. Doch wie referenziere ich auf das gerade erstellte/ zu erstellende Objekt ?


MfG

StrgAltEntf
15.05.2004, 15:08
Original geschrieben von Crashman
Ich habe jetzt ein Static Attribut (ArrayList) angelegt. Dort sollen die Objekte rein.
Der Konstruktor wird aufgerufen und dieser wiederum ruft eine Methode auf, die das erstellte Objekt in die Liste eintragen soll. Doch wie referenziere ich auf das gerade erstellte/ zu erstellende Objekt ?


MfG liste.add(this);

Mit Unterklassen kann's da aber tatsächlich unschön werden, weil die tatsächlich immer den Konstruktor der Oberklasse aufrufen (wenn man nichts angibt, den Defaultkonstruktor ohne Argumente). Das ist nicht zu verhindern - das Problem dabei: Wenn man dann z.B. sowas wie Unterklasse.gibMirAlleinstanzen() aufruft, gibt er alle Instanzen der ursprünglichen Klasse (und ALLEN Unterklassen) zurück - es sei denn, man überschreibt die entsprechenden statischen Methoden (gibMirAlleinstanzen() und eventuelle andere) und führt für jede Unterklasse eine eigene Liste von Instanzen ein. Dann werden Instanzen der Unterklasse zwar immernoch als Instanzen der ursprünglichen Klasse aufgezählt (korrekterweise), umgekehrt aber nicht. Ist halt dann unschön, dass man den ganzen Code doppelt/ dreifach/ n-fach hat... (man könnte den Code natürlich irgendwie auslagern)

Hannnibal
15.05.2004, 15:33
Moin,
grundsätzllich wissen die klassen nichts von ihren "Kindern".
Leg die objekte doch in eine LinkedList...

Wenn die "brüder" von einander wissen sollen, da mach ein attribut
static LinkedList objektListe = new LinkedList();

und füge in dem konstructor des objekt es sich selber zu
objectListe.add(this);

dann brauchste keinen zähler :).

mfg

mfg

Crashman
15.05.2004, 15:33
Ich hab das Problem gelöst. Meine Variante stützt sich auf eine andere Klasse die die Objekte instanziiert. Ist zwar nicht so schön und flexibel, funktioniert aber.

MfG



Copyright © 1999 - 2011 Planet 3DNow!
Rechtliche Hinweise