Klassen Von Instanzvariablen auf Instanz schließen

Holger_Hessling

Aktives Mitglied
Hallo Forum,

helft mir bitte auf die Sprünge. Jede Instanz einer Klasse hält ihrerseits eine Referenz auf eine Liste. Hab also bei N Instanzen meiner Klasse insgesamt N Referenzen auf Listen (in jeder Instanz eine Referenz).
Ist es möglich, mit einer dieser Referenzen auf die Instanz meiner Klasse zu schließen?

VG Holger
 

Holger_Hessling

Aktives Mitglied
okay, ein kleines Beispiel...
Code:
public class MyClass {

  private List<SomeClass> some = new ArrayList<>();

  public void addSome (SomeClass sc) {
    some.add(sc);
  }

/*   other stuff   */

  public List<SomeClass> getSome() {
    return some;
  }
}
Code:
public static void main(String[] args) {

  MyClass myClass = new MyClass();

  List<SomeClass> listSome = myClass.getSome();


??  hat listSome noch einen Bezug auf seine Instanz von MyClass  ??

}

Der getter liefert eine Referenz auf die Liste, die von einer Instanz der Klasse MyClass gehalten wird. Im Beispiel hat listSome diese Referenz. Die Frage ist, ob listSome noch einen Bezug zu der Instanz hat, die diese Liste hält?!

Aber mittlerweile bin ich der Überzeugung, daß das eine blöde bzw. unsinnige Frage ist. Ich werde wohl die Liste einer Instanz durch einen wrapper halten müssen, der auch die Referenz zur Instanz der Klasse MyClass speichert.

VG Holger
 

Thallius

Top Contributor
Warum hältst du nicht einfach die Referenz auf myClass wenn du sie denn brauchst? Was soll der Quatsch mit einem Wrapper?
 

looparda

Top Contributor
Ich seh noch nicht ganz warum und wieso aber entspricht das nicht dem was du willst?
Java:
public Map<MyClass, List<SomeClass>> getReferencedGetSome() {
    final Map<MyClass, List<SomeClass>> map = new HashMap<>();
    map.put(this, getSome());
    return map;
}
 
Zuletzt bearbeitet:

Holger_Hessling

Aktives Mitglied
Ich bekomme ohne jeden Kontext die Referenz auf eine Liste, die ihrerseits in einer der bestehenden Instanzen der Klasse MyClass vorkommt. Die Frage ist, ob ich alleine aus dieser Referenz auf diese Liste einen Bezug auf die Instanz der Klasse MyClass herstellen kann, die diese Liste hält.
 

flopalko

Bekanntes Mitglied
Ich sehe auch keine Sinnhaftigkeit warum man das machen will aber die Lösung mit der Map ist die eleganteste, wollte ich auch vorschlagen.
Aber trotzdem die Frage: wozu willst du das machen? Wenn du dir die Liste aus der Instanz holst weißt du doch natürlich (da du die Referenz ja hattest um die Liste zu holen) zu welcher Referenz die gehört. Was genau willst du damit implementieren?

EDIT: Ok nach deinem obigen Posting ist diese Lösung daher nicht geeignet. Erläutere einmal dein Design, dann kann man sich was vorstellen. Wenn du irgendwoher deine Liste herbekommst ist es vermutlich am besten global eine Map mit der Liste als key und der korrespondierenden Instanz als value zu verwalten. Mir fällt allerdings keine sinnvolle Anwendung ein wo du dies benötigen würdest, ich tippe eher auf einen Fehler im Design.
Eine andere Möglichkeit wäre noch in der MyClass Klasse eine Methode zu implementieren, ob die Liste enthalten ist und dann durch alle Objekte zu iterieren und zu prüfen ob dies die richtige Instanz ist. Hat halt ein schlechteres Laufzeitverhalten, dafür eine geringere Speicherkomplexität.
 
Zuletzt bearbeitet:

looparda

Top Contributor
Ja, anstatt hier Dummy-Klassen einzusetzen solltest du mal klar sagen was du vor hast. Dann kann man dir besser helfen.

Wie du mit Map.Entry über eine Map iterierst weißt du bestimmt.
 
Zuletzt bearbeitet:

Holger_Hessling

Aktives Mitglied
Ich merke gerade, daß ich Schwierigkeiten habe, zu Beschreiben, wozu ich das so wie geschildert brauche. Wahrscheinlich habe ich einen Knoten im Hirn und sollte mal eine Pause machen. Wahrscheinlich ist meine derzeitige 'Designvorstellung' nicht sehr klug...

Stellt Euch bitte vor, daß die gezeigte Klasse MyClass nicht nur eine Liste vom Typ SomeClass hält, sondern mehrere Listen mit jeweils eigenen Typen. Diese Listen haben jeweils unterschiedlich viele Einträge.

Das Ganze soll jetzt in einem Baum dargestellt werden. Jede Instanz der Klasse MyClass entspricht einem Eintrag in dem Baum (alles Kinder von der Wurzel). Jedes dieser Kinder hat seinerseits Kinder. Diese Kinder sind die unterschiedlichen Listen, die eine Instanz von MyClass hält. Diese haben jeweils so viele Kinder, wie die entsprechende Liste Einträge hat.

Mein eigentlich erstes Problem ist, daß die Knoten des Baums jeder einen anderen Typ hat. Wie ich das gelöst bekomme, weiß ich auch noch nicht.

In meiner derzeitigen Vorstellung bekomme ich eine Referenz auf eine der Listen, wenn ich eine der Listen im Baum anklicke. Von da an brauche ich aber noch die Instanz, die diese Liste hält.

Vielleicht denke ich auch einfach zu kompliziert und habs einfach noch nicht vollständig, gedanklich durchdrungen :rolleyes:

VG Holger
 

Meniskusschaden

Top Contributor
Ja, anstatt hier Dummy-Klassen einzusetzen solltest du mal klar sagen was du vor hast. Dann kann man dir besser helfen.

Wie du mit Map.Entry über eine Map iterierst weißt du bestimmt.
Wenn man anhand der Liste das Objekt finden will, dass die Referenz auf die Liste hält, ist es aber sinnvoller, die Map anders herum zu organisieren, so wie @flopalko es in Post #8 vorgeschlagen hat. Dann kann man sich das Iterieren sparen.
Mein eigentlich erstes Problem ist, daß die Knoten des Baums jeder einen anderen Typ hat. Wie ich das gelöst bekomme, weiß ich auch noch nicht.
Du könntest für die Knoten vielleicht eine abstrakte Klasse oder ein Interface mit den Methoden getParent() und getChildren() erstellen. Die Klassen für die konkreten Knotentypen könnten dann die abstrakte Klasse erweitern bzw. das Interface implementieren.
 

flopalko

Bekanntes Mitglied
Wenn das Design so ist, warum hast du nicht überhaupt eine Klasse TreeNode für die jeweiligen Knoten, die parent und children verwaltet und eine Referenz auf ein Object, dein Nutzobjekt, beinhaltet. So ist jeder Knoten ein TreeNode mit allen Operationen darauf und du hast deinen Nutzinhalt in einem Object das jeweils von irgendeiner Klasse sein kann.
 

looparda

Top Contributor
Du könntest für die Knoten vielleicht eine abstrakte Klasse oder ein Interface mit den Methoden getParent() und getChildren() erstellen. Die Klassen für die konkreten Knotentypen könnten dann die abstrakte Klasse erweitern bzw. das Interface implementieren.
Hab ich auch schon Überlegt. Üblicherweise nennt man das Node.

Aber dennoch musst du wieder an den Typen kommen, der hinter dem Knoten liegt.
 

Holger_Hessling

Aktives Mitglied
Ich danke Euch allen für Eure Gedanken! Map, abstrakte Klasse, Interface. Das sind alles gute Ideen. Danke! Das meinte ich oben mit wrapper, auch wenn's die falsche Formulierung war.

Die Map kann ich mir noch am besten durchdebken. Interfaces klingen auch gut, doch durchklicke ich das weniger.
 

Meniskusschaden

Top Contributor
Aber dennoch musst du wieder an den Typen kommen, der hinter dem Knoten liegt.
Falls man den Typen wirklich benötigt, kann man den Knoten ja so programmieren, dass er ihn liefert. Ich bin aber noch nicht überzeugt, dass man ihn überhaupt benötigt. Das jeweilige individuelle Verhalten der unterschiedlichen Knotentypen wäre ja normalerweise bereits durch entsprechende Implementierung der konkreten Knotenklassen abgedeckt.
 

Harry Kane

Top Contributor
So wie es aussieht, möchtest du in einem JTree Daten oder Objekte anzeigen, die "eigentlich" keine TreeNodes sind.
Wie sind denn die Eltern-Kindkno9ten-Beziehungen? Wenn du eine MyClass mit einer List<SomeClass> hast, ist dann die List der "Parent node" der SomeClass Instanzen oder die "umgebende" Instanz von MyClass?
 

Holger_Hessling

Aktives Mitglied
Hallo Harry,

ja, Du hast recht. Ein TreeView (JavaFX) soll meine Daten abbilden. Ich zeige Dir mal meine Daten:
Code:
public class Tauchgang {

   private static int instanceCount = 0;

   private int myCount;
   private String kurzBeschreibung;

   private List<ProfilPlan> profilPlan = new ArrayList<>();
   private List<Umgebung> umgebung = new ArrayList<>();
   private List<FlaschenGase> flaschenGase = new ArrayList<>();
   private List<GasManagement> gasManagement = new ArrayList<>();
   private List<Profil> profil = new ArrayList<>();

/*  ...  */

}
Der angesprochene Baum soll nun in der ersten Ebene für jede Instanz dieser Klasse einen Eintrag zeigen. Jedem Eintrag werden fünf Kinder angehängt. Diese repräsentieren die fünf List<...> ArrayList's. Darunter sind dann für jedes Element der jeweiligen Liste weitere Kinder angehängt. Für eine Interaktion mit der Maus muß es möglich sein, für "das Kind einer Liste einer Instanz" einen Bezug zur Datenbasis zu haben.

Soweit ich es weiß, können in einer TreeView<EineBestimmteKlasse> nur TreeItem's mit genau dergleichen Klasse 'EineBestimmteKlasse' angehängt werden. Das können meine Daten ja schon nicht so machen, denn es gibt das Objekt der Instanz meiner Klasse 'Tauchgang' und fünf Listen. Darum habe ich diese Referenzen in einer eigenen Klasse gekapselt und hänge Objekte dieser Klasse in den Baum. Das sieht momentan in etwa so aus:
Code:
public class TGTreeNode {

   private String nodeName;
   private Tauchgang tauchgang;
   private List<?> list;
   private Integer index;

  @Override
  public String toString() {
    return nodeName;
  }

/*  ...  */

}
Soll ein neuer Knoten in den Baum gehängt werden, so packe ich meine nötigen Referenzen in ein Objekt dieser Klasse und hänge das in den Baum. Ein Beispiel für einen neuen Tauchgang und einer Liste 'Profil' mit seinen Kindern sieht dann so aus (es werden immer alle fünf Listen angehängt, habe für das Beispiel hier nur die Liste 'Profil' dargestellt):
Code:
  private final TreeItem<TGTreeNode> rootNode = new TreeItem<>(new TGTreeNode("Keine Tauchgänge!!!"));

  /*  ...  */

  TGTreeNode treeItem = new TGTreeNode(tauchgang);

   TreeItem<TGTreeNode> newTG = new TreeItem<>(treeItem);

   rootNode.getChildren().add(newTG);
   rootNode.getValue().setNodeName("Tauchgang...");
   rootNode.setExpanded(true);

  TreeItem<TGTreeNode> newList;

  treeItem = new TGTreeNode(tauchgang, tauchgang.getListProfil(), "Profile");
  newList = new TreeItem<>(treeItem);
  newTG.setExpanded(true);
  newTG.getChildren().add(newList);

  // für alle Kinder in List<Profil> Nodes anlegen
  //

  i = 0;
  for (Profil p : tauchgang.getListProfil()) {
    treeItem = new TGTreeNode(tauchgang, tauchgang.getListProfil(), i++, p.toString());
    newChild = new TreeItem<>(treeItem);
    newList.getChildren().add(newChild);
  }

    /*  ...  */
Es soll dann so werden, daß ich mit einem Klick auf ein Element des Baumes die Referenz auf eine Instanz des 'TGTreeNode' erhalte und darin die Informationen finde, wo in meinen Daten die "geklickte Position" ist. Das ist also der 'Tauchgang', eine Liste List<?> und evtl. ein Index.

Die Liste muß ich mir dann noch durch Vergleich der fünf Referenzen in dem jeweiligen Tauchgang heraussuchen, denn ich weiß ja jetzt nicht mehr, ob es die Liste für 'ProfilPlan', 'Umgebung', 'FlaschenGase', 'GasMangement' oder 'Profil' ist. Das ist zwar etwas schwerfällig gelöst, aber ich kenne momentan keine geschicktere Lösung ;)

VG Holger
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Objektvariablen, Klassenvariablen, Instanzvariablen Java Basics - Anfänger-Themen 1
S Instanzvariablen vom Typ einer Klasse definieren Java Basics - Anfänger-Themen 12
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
B Methoden Nutzen der Instanzvariablen in Klassenmethoden Java Basics - Anfänger-Themen 1
G Klassenvariablen & Instanzvariablen Java Basics - Anfänger-Themen 4
N Instanzvariablen als private... Java Basics - Anfänger-Themen 2
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
J Klassen Ein Problem mit den Instanzvariablen Java Basics - Anfänger-Themen 13
S Instanzvariablen Java Basics - Anfänger-Themen 3
F wie oft werden Instanzvariablen genutzt Java Basics - Anfänger-Themen 14
J Variablen Aktualisieren von Instanzvariablen Java Basics - Anfänger-Themen 14
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Instanzvariablen mögliche Werte zuweisen Java Basics - Anfänger-Themen 6
S Variablen viele Instanzvariablen vermeiden Java Basics - Anfänger-Themen 14
R Vererbung Bitte um Erklärung - Instanzvariablen Java Basics - Anfänger-Themen 8
Luk10 Ändern von Instanzvariablen Java Basics - Anfänger-Themen 2
M fehler bei instanzvariablen deklaration?? Java Basics - Anfänger-Themen 6
J Instanzvariablen - Lokale Variablen - warum der Unterschied? Java Basics - Anfänger-Themen 5
Luk10 Vererben von private instanzvariablen Java Basics - Anfänger-Themen 20
Q Instanzvariablen implementieren - grundlegende Probleme Java Basics - Anfänger-Themen 3
S Zugriffe über Private Instanzvariablen Java Basics - Anfänger-Themen 3
F Zugriff auf Instanzvariablen, Frage zum guten Stil Java Basics - Anfänger-Themen 2
B Instanzvariablen private? Java Basics - Anfänger-Themen 5
D Fehler beim Aufrufen von Instanzvariablen Java Basics - Anfänger-Themen 5
7 Lokale Variablen, Klassenvariablen, Instanzvariablen Java Basics - Anfänger-Themen 15
G Klassen- und Instanzvariablen / Klassen- und Instanzmethode Java Basics - Anfänger-Themen 8
P Was sind Instanzvariablen? Java Basics - Anfänger-Themen 5
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
O Mit Instanz von Oberklasse auf Unterklasse zugreifen Java Basics - Anfänger-Themen 2
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
I Instanz einer anderen Klasse zurückgeben Java Basics - Anfänger-Themen 34
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
F Mehrere Instanzen der Klasse A EINER Instanz der Klasse B übergeben Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
T Auf Instanz einer Liste zugreifen Java Basics - Anfänger-Themen 2
M Neu instanzierte Klasse übernimmt Werte von anderer Instanz Java Basics - Anfänger-Themen 4
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
W Methoden Methode ohne Parameter auf Instanz eines Objekts aufrufen? Java Basics - Anfänger-Themen 14
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S Klassen Instanz anderer Klasse raus geben Java Basics - Anfänger-Themen 1
B Klassen Auf Instanz anderer Klasse zugreifen Java Basics - Anfänger-Themen 1
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
D Instanz einer Subklasse anhand deren Superklasse Java Basics - Anfänger-Themen 5
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
O OOP Methoden bei erstellen einer Instanz und mehr Java Basics - Anfänger-Themen 4
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
B Variablen Instanz von Enum zur Laufzeit erstellen und zuweisen Java Basics - Anfänger-Themen 2
G Undefined Instanz/Konstruktoraufruf Java Basics - Anfänger-Themen 8
S Ein Attribut/Instanz eines bestehendes Objektes mit SETTER Methode ändern Java Basics - Anfänger-Themen 3
M Initialisierungsblock beim Erzeugen einer Instanz Java Basics - Anfänger-Themen 6
J Instanz durch String Java Basics - Anfänger-Themen 8
U final Instanz Java Basics - Anfänger-Themen 11
C Klassen Zugriff auf Instanz einer anderen Klasse Java Basics - Anfänger-Themen 9
F Array als Instanz einer Klasse Java Basics - Anfänger-Themen 8
P Klassen Instanz einer Klasse in ihrer eigenen Definition erzeugen? möglich? Java Basics - Anfänger-Themen 4
O Erste Schritte Klassenname zurückgeben, keine instanz Java Basics - Anfänger-Themen 23
0 Log4J Instanz erzeugen Java Basics - Anfänger-Themen 2
K Methoden Zustand innerhalb einer Instanz ändern Java Basics - Anfänger-Themen 2
B Geerbte Instanz kann keine void Methode ausführen?! Java Basics - Anfänger-Themen 15
pindakaas Instanz einer Klasse in einer anderen erzeugen Java Basics - Anfänger-Themen 6
L Instanz Problem Java Basics - Anfänger-Themen 4
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
M JRadioButton keine Instanz von ButtonModel Java Basics - Anfänger-Themen 10
B Daten in Instanz einer Klasse ändern / abfragen Java Basics - Anfänger-Themen 12
A Instanz einer Klasse Java Basics - Anfänger-Themen 2
S Instanz(en) einer Singleton-Klasse Java Basics - Anfänger-Themen 11
S OOP Warum gleiche Instanz der Klasse? (Factory-Muster) Java Basics - Anfänger-Themen 13
O zugriff auf eine Instanz Java Basics - Anfänger-Themen 8
U Instanz aufrufen Java Basics - Anfänger-Themen 3
A Stilfrage: statische Variable mit Instanz der gleichen Klasse Java Basics - Anfänger-Themen 8
Antoras eine Instanz von mehrere Klassen aus nutzen Java Basics - Anfänger-Themen 2
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
D Servlet kann nicht auf Instanz zugreifen Java Basics - Anfänger-Themen 10
G neue Instanz von ArrayList Java Basics - Anfänger-Themen 5
G Name der Instanz einer Klasse. Java Basics - Anfänger-Themen 2
W IE Instanz öffnen / Ausführbare Datei öffnen Java Basics - Anfänger-Themen 2
G Was passiert mit eine Methode bei einer Instanz Java Basics - Anfänger-Themen 13
D vererbung, kinder einer instanz. Java Basics - Anfänger-Themen 25
D Bei Event soll Instanz sich selbst löschen Java Basics - Anfänger-Themen 4
G Vererbung mit einer Instanz aus der Superklasse Java Basics - Anfänger-Themen 2
J Generics Probleme mit instanz von T Java Basics - Anfänger-Themen 4
H OO-Anfänger: mehrere Klassen greifen auf eine Instanz zu Java Basics - Anfänger-Themen 9
H instanz von Button wird nicht erkannt! Java Basics - Anfänger-Themen 6
P Instanz mit allen Attributen ausgeben Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben