Instanzen in Listen Registrieren und drauf zugreifen

chetigol0308

Grünschnabel
Hi!

Ich möchte beim Erstellen der Objekte einer bestimmten Klasse, diese in einer Liste Registrieren. Diese Liste wird dann in einer anderen Klasse verwendet, wie sollte so etwas in Java am besten gelöst werden? Mein Ansatz ist derzeit folgender:

Code:
public class Objekt1 {
   // Hier werden alle Instanzen diesesr Klasse festgehalten
   static private Map<Integer, Objekt1> Liste = new HashMap<Integer, Objekt1>();
   
   // statische funktion, welche auf die Liste zugreift
   public static getObject( int Id ){
       return( Liste.get(Id) );
   }
    
   Objekt1( int id )
   {
       Liste.put( id , this );
   }
    
}

Dieses Instanzen dieser Klasse werden irgendwo erstellt
Code:
new Objekt1(1);
new Objekt1(2);
new Objekt1(3);

Dabei werden die Objekte in die Liste Aufgenommen! Jetzt wird aus einem komplett anderen Objekt auf diese Liste zugegeriffen:
Code:
public class ObjektXY {
    // .......
    
    void verwendeObjekt(){
        Objekt1.getObject( 1 );
    } 
}

Ist an dieser vorgehensweise etwas auszusetzen? Die Liste wird ja als eine Art globaler Variable verwendet! Ist es in Java auf diese Art ok?
Oder sollte ich die Liste in ein eigenes Objekt ausgliedern und dieses dann dem „ObjektXY“ in einem Konstruktor übergeben, damit dieses Objekt auf die Liste zugreifen kann

Also als Beispiel:
Code:
o1 = new ObjektXY( Objekt1.Liste );

Oder wie schon oben beschrieben, die Liste in ein eigenes Objekt ausgliedern, welches die „Objekt1“ – Instanzen aufnimmt, und dieses an ObjektXY übergeben

Ich tendiere eher zur ersten Möglichkeit, aber so sicher bin ich mir da auch nicht!
 
Die Objekte, die du in die Map einsortierst sind vom selben Typ wie der Typ, der die Instanz der Map hält. Das ist nicht so gut, da sich dadurch quasi eine Rekursion in der Struktur ergibt. Nämlich eine Klasse, die eine Map von Objekten enthält, die wiederum jeweils eine Map von Objekten enthalten.
Besser wäre, einen eigenen Typ von Objekten für das Einsortieren in die Map zu verwenden.
 
Zurück