Objekt als Referenz übergeben in Java
Hallo,
ich möchte von der Hauptklasse ein Objekt der Klasse GUI erzeugen. Dabei soll das Objekt der Hauptklasse gleich an das neu erzeugte Objekt der Klasse GUI übergeben werden.
Damit versuche ich mit dem GUI Objekt, Methoden von der Hauptklasse aufzurufen.
Wer einen anderen Weg weiß, um diese bidirektionale Assoziation herzustellen und zu ermöglichen, dass beide Objekte Methoden des jeweils anderen Objekts aufrufen können, freut mich das natürlich auch.
Ich programmiere in Java.
Grüße
4 Antworten
Naja ich nehme an du erzeugst es etwa so:
GUIKlasse g = new GUIKlasse();
Nun kannst du ja einfach mit "this" die Referenz der aktuellen Klasse mitgeben:
GUIKlasse g = new GUIKlasse(this);
Dafür müsstest du natürlich auch im Konstruktor der GUIKlasse ein Parameter vom Typ der Hauptklasse erstellen.
Ich hoffe ich habe deine Frage richtig verstanden. ;)
Na dann müsstest du in der main Methode zuerst ein neues Hauptklasse Objekt erstellen und diese dann mitgeben:
public class Hauptklasse { public static void main(String[] args) { Hauptklasse s = new Hauptklasse(); GUI jf = new GUI(s); /* Oder ne andre Moeglichkeit */ GUI jf = new GUI(new Hauptklasse()); } }
public GUI(Hauptklasse dieHauptklasse) { this.dieHauptklasse = dieHauptklasse; }
In der Regel zeigt die Notwendigkeit, dass zwei Klassen sich gegenseitig kennen, ein schlechtes Design des Programms. In 99% der Fälle kann man diese Probleme eleganter lösen ohne, dass sie sich gegenseitig kennen.
Was genau hast du denn vor?
Ggf. solltest du genauer erklären was du vor hast, was das für Klassen sind und was sie machen. Eine saubere Lösung würde hier wohl in einer Richtung über die normale Dependency Injection klappen, in der anderen Richtung könnte man z.B. mit Callbacks arbeiten. Wenn beide Klassen aber massiv Funktionen der anderen benutzen ist das oft ein Zeichen dafür, dass es keine zwei Klassen sein sollten oder ein Bindeglied fehlt.
Hast du es schon mit instanzofobject = new object versucht?
So sieht das im Moment aus
Mit this bekomme ich trotzdem eine Fehlermeldung