Java 20 Instanzen einer Klasse werden erzeugt - wie einzeln ansprechen?

Big-Blue

Lieutenant
Registriert
Mai 2010
Beiträge
569
Hallihallo,

ich habe hier zum Teil fertigen Code eines Rätsels, dass man lösen soll.
Das habe ich zum Großteil bereits, doch bei einer Frage stehe ich auf dem Schlauch.
Es werden 20 Instanzen einer Klasse erzeugt, kann ich diese irgendwie einzigartig machen und kuppeln oder so?
Also z.B. indem ich eine neue Klasse mit einem public Wert erzeuge, und bei jeder Initialisierung der ersteren Klasse wird dieser inkrementiert und als Wert der jetzigen Instanz gesetzt.
Das Problem dann ist, dass ich keine Ahnung habe, wie ich diese einzelnen Klassen noch ansprechen soll. Die Instanzen werden nämlich nur erzeugt und platziert, aber nicht referenziert.
Um das ganze mal anschaulich zu machen (Abstraktes Beispiel):
Oberklasse (final):
Code:
private void releasePassenger()
    {
        if(released < total) {
            i++;
            if(i == 10) {
                getWorld().addObject(new Class(this), getX(), getY());
                total++;
                if(timer == null) {
                    startTimer();
                }
                i = 0;
            }
        }
    }
Die "Class" aus dem vorherigen Beispiel:
Code:
public Class {
    this.number = CounterClass.getCount();
    CounterClass.increment();
}
Der Code der CounterClass wäre dann vermutlich sehr simpel ;P
 
Hi!

Also laut dem Beispiel werden die Instanzen der Klasse in getWorld() per addObject abgelegt. Gibt es da kein getObject() das nen Iterator liefert? ;) Ansonsten (bei eindeutigen) Instanzen kann man das über Public-Felder machen, aber es ist nicht besonders elegant. Man nimmt da in der Java-Welt eher getter/setter und/oder den Konstruktor der Klasse um Werte beim Erstellen zu übergeben. Oftmals ist aber eine genaue identifizierung gar nicht notwendig?

Flip
 
Irgendwie kapier ich überhaupt nicht was du da bezweckst... wie wäre es mit etwas mehr Quellcode und zwar zusammenhängenden Quellcode?

An sonsten kann ich nur sagen... hab zwar mit Java noch nicht gearbeitet, aber ist ja C# sehr ähnlich. Es wird da bestimmt auch sowas wie ein Hashtable oder sowas geben?

Dann könntest du ja die Klassen erstellen und dann dem Hashtable zuweisen. Über das Hashtable könntest du die dann ansprechen (wenn du z.B. weist unter welchem namen du sie gespeichert hast).

Ist nur ein Beispiel auf die schnelle hingeklatscht:

Code:
public myClass {
  private int member1 = 1;
  private string member2 = "Member 2";

  //Konstruktor
  public myClass() {

  }

  //Methoden
  public myClassFunction() {
    //do something
  }
}

Dann z.B. in deinem Programm die Funktion in der die Klassen erstellt werden (ich gehe in diesem Fall mal von einer Schleife aus).

Code:
private funktionImProgramm() {
  HashTable myTable = new HashTable();

  for(int i = 0; i < 20; i++) {
    string klassenname = "Klasse" + i; //entspricht z.B. Klasse1, Klasse2, ...

    myClass klasse = new myClass();

    myTable.Add(klassenname, klasse);
  }
}

Natürlich muss das HashTable global sein wenn du es in anderen Funktionen verwenden willst. Aber so dürfte es in etwa gehen. Dann kannst du jede einzelne Instanz deiner Klassen über folgenden Code ansprechen:

Code:
myClass klasse = (myClass)myTable["Klasse3"];
klasse.myClassFunction();

//andere Möglichkeit sie anzusprechen:
(myClass)(myTable["Klasse6"]).myClassFunction();
Ergänzung ()

PS: ok jetzt nach näherem hingucken hab ich dein Beispiel auch kapiert, aber kannst es ja trotzdem evtl mal mit dem HashTable ausprobieren wenn es nicht zu viel Aufwand ist das umzuändern bzw. du es verkraften kansnt :D ;-)
 
Zuletzt bearbeitet:
Big-Blue schrieb:
Es werden 20 Instanzen einer Klasse erzeugt, kann ich diese irgendwie einzigartig machen und kuppeln oder so?

Jede Instanz mit einem Fingerprint versehen und entsprechend abspeichern.

Big-Blue schrieb:
Also z.B. indem ich eine neue Klasse mit einem public Wert erzeuge, und bei jeder Initialisierung der ersteren Klasse wird dieser inkrementiert und als Wert der jetzigen Instanz gesetzt.

Genau, public muss der Wert nicht sein. Nur eindeutig.

Big-Blue schrieb:
Das Problem dann ist, dass ich keine Ahnung habe, wie ich diese einzelnen Klassen noch ansprechen soll. Die Instanzen werden nämlich nur erzeugt und platziert, aber nicht referenziert.

Je nach Verwendung entweder lediglich alle Klassen abspeichern => List oder Set
Oder jede Instanz der eindeutigen Id zurordnen => Map

Das würde dann in "World" geschehen (bzw. ist ohnehin schon vorhanden und/oder es müssen lediglich noch Routinen zum Zugriff hinzugefügt werden). Du willst Dich noch etwas mit den Java Collections beschäftigen...
 
Zurück
Oben