Liste aller Instanzen einer Klasse

O

Oger-Lord

Gast
Hallo,
Ich habe einige Klassen bei denen ich gerne alle exestierenden Instanzen durchlaufen würde.
Da es mehrere Klassen sind wäre es zu umständlich für jede eine ArrayList zu verwenden. In einer anderen Programmiersprache konnte ich ein schönes ListModul dafür verwenden aber ich weiß nicht ob das in Java eine so gute Lösung wäre da eine Klasse ja nur von einer anderen Klasse erben kann und nicht von mehreren.
Oder sollte ich doch lieber eine Art Register schreiben in den jede betroffene Klasse ihre Instanzen einträgt?
Gibt es vielleicht schon etwas vorgefertigtes genau zu diesem Zweck?
 
G

Gast2

Gast
Du kannst beliebige Instanzen in eine
Code:
List<Object>
legen, oder nur Klassen mit einer bestimmten Oberklasse oder einem Interface in eine
Code:
List<? extends MySuperClass>
.
Was genau ist ein ListModul?

Oder sollte ich doch lieber eine Art Register schreiben in den jede betroffene Klasse ihre Instanzen einträgt?
Wäre ne Möglichkeit. Da würde sich ne Factory anbieten die die Objekte erstellt und direkt in eine Liste legt.
 
B

Beni

Gast
Ich verkneiffe mir fast jeden Kommentar zum fragwürdigen Design das zu so einer Frage führt:
Ich habe einige Klassen bei denen ich gerne alle exestierenden Instanzen durchlaufen würde.

Vielleicht haben all diese Klassen etwas gemeinsam? Vielleicht wäre ein gemeinsames Interface angebracht? Dann reicht dir eine Liste.

Klassen die sich selbst irgendwo einfügen erscheinen mir verdächtig, was genau machen diese Klassen und wieso müssen sie in eine Liste? Im Zweifellsfalle sollte lieber der Code der die Instanz erzeugt die Klassse in eine passende Liste stecken. Ist ein bisschen weniger anfällig für Memory Leaks.

Du könntest den Typen der Klasse
Code:
Class<?> type = object.getClass();
als Schlüssel für eine Map mit Listen
Code:
Map<Class<?>, List<?>> instances
verwenden und dann gleich nach Typ sortieren. Da musst du nur noch eine Methode schreiben um automatisch neue Listen zu generieren.
 
B

bygones

Gast
ich schliesse mich dem Design-Problem an und wuerde empfehlen eher noch mal genauer zu schreiben was du willst, also einen der ins blaue geratenen Ratschlaege zu versuchen
 
O

Oger-Lord

Gast
Ja, wegen dem Design war ich auch unsicher.
Ich möchte ein Spiel erstellen bei dem es Einheiten, Effekte, Geschosse ect gibt. Wenn ich dann mal alle Einheiten in einem Radius um einen Punkt herausbekommen möchte wäre es am sinnvollsten wenn die Einheiten auch wirklich getrennt in einer Liste stehen würden.

Ansonsten ist hier der Code des Listmoduls aus der anderen Programmiersprache:
[Java]
struct Example
implement List

static method create takes nothing returns Example
local Example this = allocate()
call listAdd() //This method adds the instance to the list.
return this
endmethod

method onDestroy takes nothing returns nothing
call listRemove() //This method removes the instance from the list.
endmethod
endstruct

function IterationExample takes nothing returns nothing
local Example e = Example.first
loop
exitwhen e == 0
//Do something with e here.
set e = e.next
endloop
endmethod[/Java]


Klassen die sich selbst irgendwo einfügen erscheinen mir verdächtig, was genau machen diese Klassen und wieso müssen sie in eine Liste? Im Zweifellsfalle sollte lieber der Code der die Instanz erzeugt die Klassse in eine passende Liste stecken. Ist ein bisschen weniger anfällig für Memory Leaks.
Hm, also ich hab eigentlich ganz gute Erfahrungen gemacht wenn sich die Objekte selbst aufräumen und dazu würd es sich eignen wenn sich das Objekt im Konstruktor selbst einträgt und in einer Aufräum Methode wieder rauslöscht.
 
S

SlaterB

Gast
es erscheint hier unnötig, spezielle Sprach-Konstrukte zu fordern,
füge deine Spiel-Objekte lieber kontrolliert selber in Listen ein oder was auch immer,

das ganze 5x zu implementieren mag aufwendig erscheinen, da das aber auch 5 anscheinend spielrelevante Klassen mit je 100 Zeilen Quellcode bedeutet, relativiert sich das wieder,

wenn es wirklich zu aufwendig wird, dann denke noch über eine gemeinsame Basisklasse nach, die diese Aufgabe zum Teil übernehmen könnte
 
O

Oger-Lord

Gast
Ich konnte es nicht lassen und hab mit ein ListModul geschrieben, jetzt wüsste ich gerne ob man das noch etwas geschickter machen könnte:
Java:
public class ListModul{
    
    private static Hashtable<Class,ListModul> first = new Hashtable<Class,ListModul>();
    private static Hashtable<Class,ListModul> last = new Hashtable<Class,ListModul>();
    
    private ListModul next;
    private ListModul prev;
    

    protected void listAdd()
    {
        if(first.get(getClass())==null)
        {
            first.put(getClass(),this);
            last.put(getClass(),this);
        }else{
            last.get(getClass()).next = this;
            this.prev = last.get(getClass());
            last.put(getClass(),this);
        }
    }
    
    protected void listRemove()
    {
        if(this==first.get(getClass())){
            first.put(getClass(),next);
        }else{
            prev.next = next;
        }
        if(this ==last.get(getClass()))
        {
            last.put(getClass(),prev);
        }else{
            next.prev = prev;
        }
    }
    
    public boolean hasNext()
    {
        if(next == null)
        {
            return false;
        }
        return true;
    }
    
    public ListModul next()
    {
        return next;
    }
    
    
    public static Object getFirst(Class c)
    {
        return c.cast(first.get(c));

    }
    
}
Vorallem wäre es praktisch wenn direkt bei z.B. getFirst das Objekt der richtigen Klasse zugewiesen und zurück gegeben würde.
 
B

bygones

Gast
und wie verwendest du das nun ?

also wie schaut dein Verwender code aus ?

Muss nun jedes Objekt von ListModul erben ? dann kommst du schnell an deine Grenzen wegen SingelVererbung. Weiterhin haben dann deine Objekte mehrere Verantwortungen, die eigentlich + Listmanagement.

ich finde das immer noch mehr als fraglich, wenn nicht sogar absoluter Unsinn sowas machen zu wollen.

also auf deine Frage "jetzt wüsste ich gerne ob man das noch etwas geschickter machen könnte:"
ja loesch die Klasse wieder
 

bobbsen

Mitglied
Evtl. sollte auch noch beachtet werden, dass Objekte, zu denen noch min. eine Referenz existiert, nicht gelöscht werden.

Wenn du die Objekte also nicht bei der passenden Gelegenheit aus deinem Dings rausnimmst, werden sie nie aus dem Speicher entfernt.

Demnach bräuchtest du dann für jedes Objekt einen Counter, der die Anzahl der verwendeten Referenzen auf das Objekt enthält, und wenn dieser 1 ist (nur noch dein Dings), dann muss das Dings seine Referenz auch aufgeben x_X

Von daher würd ichs auch wieder löschen ;)

Bobbsen
 
Zuletzt bearbeitet:
O

Oger-Lord

Gast
Also dass das Objekt wieder rausgenommen wird mache ich mir keine sorgen, wie oben geschrieben wollte ich sowieso eine Methode erstellen welche das Objekt aufräumt. Ansonsten schreit das Problem quasi danach das ich zu C++ Wechsel was natürlich gerade im 3D Bereich viele Vorteile hat.

Ansonsten hab ich grad mal ne FactoryList erstellt, ich könnte natürlich noch einbauen das für jede Klasse eine eigene FactoryListe erstellt wird, aber das Prinzip würd gleich bleiben:
Java:
public class FactoryList {
    
    public interface FactoryElement{}
    
    private static Hashtable<Class,ArrayList> hash = new Hashtable<Class,ArrayList>();
    
    private static void addList(Class c, FactoryElement fe)
    {
        ArrayList al = hash.get(c);
        if(al == null)
        {
            al = new ArrayList();
        }
        al.add(fe);
        hash.put(c,al);
    }
    
    private static void removeList(Class c, FactoryElement fe)
    {
          ArrayList al = hash.get(c);
          if(al != null)
          {
              al.remove(fe);
              hash.put(c,al);
          }
    }
    
    private static ArrayList getList(Class c)
    {
        return hash.get(c);
    }
}
 
B

bygones

Gast
wenn du meinst fuer dein Problem sei C++ besser, dann nimm das doch ?

wenn man so deine ergebnisse in Java anschaut ist das vielleicht sogar besser.

was soll denn diese FactoryList machen ? lauter private methoden bringen dich auch nicht weiter.
 
O

Oger-Lord

Gast
Ich warte eigentlich darauf das Jemand schreibt: "Ach ja, sowas gibt es schon in Java/wurde von XY schon in Java umgesetzt".
Das mit den über 5 ArrayListen hatte ich schonmal früher in einem Projekt gemacht und fand es nicht so pralle.
 
T

Tomate_Salat

Gast
Designfehler bleibt Designfehler, auch in C++. Mein Tipp: Lass die Finger von Spielen und lerne Grundlagen. Wenn du nichtmal den Unterschied zwischen private und public kennst, haben dich GUI-Anwendungen in keiner Sprache zu interessieren. Auf die Klasse [c]ListModul[/c] brauch ich nicht eingehen, da wurde alles zu gesagt.
 
B

Beni

Gast
Ich kann ja nachvollziehen, dass man vielleicht eine Liste z.B. für alle Einheiten braucht. Das ist auch nicht das Problem. Dein ultra-über-generischer Ansatz ist einfach seltsam. Wenn du anstelle der Class z.B. ein Enum (mit Konstanten für Einheit, Effekt, etc..) als Schlüssel verwenden würdest, könnte ich das sogar halbwegs akzeptieren.

Aber in Wirklichkeit interessiert es doch niemanden, was für ein Typ (Klasse) ein Objekt hat, sondern was für eine Rolle (=Interface) es hat. Es gibt z.B. die Rolle "Paintable", etwas das gezeichnet werden kann. Oder "Moveable", etwas das von der Physik beeinflusst wird. Wieviele Rollen gibt es? 1000 oder doch eher etwa 5? In letzterem Fall kannst du pro Rolle eine fest eincodierte Liste verwenden. Ein Objekt das mehr als eine Rolle hat, taucht halt auch in mehr als einer Liste auf.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Liste aller Klassen die in einem Paket sind Java Basics - Anfänger-Themen 7
D Summe aller Positiven Integer aus einer Liste mit ActionObject Java Basics - Anfänger-Themen 2
S Liste aller Partitionen (auch "unmounted") Java Basics - Anfänger-Themen 2
F Liste aller Ordner auf einem Laufwerk erstellen? Java Basics - Anfänger-Themen 3
B Liste aller Klassen die ein Interface implementieren. Java Basics - Anfänger-Themen 7
G Liste aller WindowListener Java Basics - Anfänger-Themen 3
A Liste aller Items einlesen Java Basics - Anfänger-Themen 8
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Java Liste streamen Java Basics - Anfänger-Themen 10
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
Z Liste umkehren Java Basics - Anfänger-Themen 1
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M QuickSort und Liste Java Basics - Anfänger-Themen 6
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
M Array liste Verdrehen Java Basics - Anfänger-Themen 8
A Verkettete Liste Java Basics - Anfänger-Themen 2
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
B Liste sortieren? Java Basics - Anfänger-Themen 4
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
O ADT Liste z. B. Java Basics - Anfänger-Themen 15
B sortierte Liste Java Basics - Anfänger-Themen 4
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben