Felix: Methode auf jedem Object einer Klasse aufrufen

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

  1. 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!

    1. 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.