Methode auf jedem Object einer Klasse aufrufen
Felix
- java
hallo zusammen
der betreff sagt eigentlich schon alles, ich will die frage aber noch ein bisschen ausformulieren:
ich habe eine klasse "Animal", die Klasse besitzt eine Methode "do_something".
nun erstelle ich in einer anderen Klasse (World.java) beliebig viele Instanzen von "Animal".
meine frage nun: wie kann ich (ohne die anzahl instanzen zu kennen) die methode
"do_something" auf jede instanz aufrufen?
folgendes code snippet:
--------------------- snip ---------------------------
class World {
public static void main(String argv[]) {
Animal tiger = new Animal();
Animal lion = new Animal();
Animal elephant = new Animal();
//jetzt kommt mein problem...
//so in etwa stelle ich mir das vor
foreach (instance of Animal) {
currentInstance.do_something();
}
}
}
--------------------- snap ---------------------------
vielen dank für eure hilfe schon im voraus & have a nice day
felix
hi!
der betreff sagt eigentlich schon alles, ich will die frage aber
noch ein bisschen ausformulieren:
Eigentlich sagt mir der Betreff überhaupt nichts und er ist auch
nicht dazu da, dort die komplette Frage unterzubringen.
ich habe eine klasse "Animal", die Klasse besitzt eine Methode
"do_something". nun erstelle ich in einer anderen Klasse
(World.java) beliebig viele Instanzen von "Animal".
meine frage nun: wie kann ich (ohne die anzahl instanzen zu
kennen) die methode "do_something" auf jede instanz aufrufen?
Das geht so wie du es dir vorstellst überhaupt nicht. Du musst
irgendwo eine Liste speichern, die alle Instanzen oder zumindest
irgendwelche Referenzen auf alle Instanzen enthält. Diese Liste
gehst du dann der Reihe nach durch und rufst für jede Instanz die
Methode auf. Zur Speicherung der Instanzen bietet sich ein Vektor
oder - falls du die Namen beibehalten willst - eine HashMap o.ä. an.
Alternative: wenn die Methode do_something() nicht auf Variablen
zugreifen muss, die von der jeweiligen Instanz abhängig sind und sich
in jeder Instanz unterscheiden, kannst du eine statische Funktion
für deine Klasse definieren (siehe Java-Dokumentation).
bye, Frank!
Hallo Frank und Felix
Eigentlich sagt mir der Betreff überhaupt nichts und er ist auch
nicht dazu da, dort die komplette Frage unterzubringen.
Na, ganz cool bleiben!
Das geht so wie du es dir vorstellst überhaupt nicht.
Einspruch, Euer Ehren.
import java.util.ArrayList;
import java.lang.ref.SoftReference;
public class Animal
{
//Liste aller Tiere
private static ArrayList tiere = new ArrayList();
//Name des Tiers
private String name;
//neues Tier
public Animal(String s)
{
//Tier zur Liste hinzufügen.
tiere.add(new SoftReference(this)); //SoftReferences werden vom garbage collector nicht berücksichtigt.
name = s; //Name des Tiers
}
//Methode do_something auf alle Tiere anwenden
public static void all_do_something()
{
System.gc(); //garbage collector ausführen um sicher zu stellen, das alle nicht mehr benötigten Instanzen entfernt werden.
for(int a = 0; a < tiere.size(); a++)
{
if(((SoftReference)tiere.get(a)).get() == null)//Wenn die Instanz nicht mehr existiert
{
tiere.remove(a);//tier aus der liste löschen
a--;
}
else
{
((Animal)((SoftReference)tiere.get(a)).get()).do_something();//sonst do_something aufrufen
}
}
}
public void do_something()
{
System.out.println(name);//Name des tiers ausgeben.
}
}
Tschüs,
Daniel
Unmöglich ist nichts - außer die Lösung zu fnden.