Referenz einer bereits instanziierten Klasse während des Programmablaufs

Cyborg

Aktives Mitglied
Moin,

ich weiß nicht, ob ich gerade auf dem Schlauch stehe, aber ist es möglich von einer bereits instanziierten Klasse im späteren Programmablauf DIESE Referenz für eine andere Klasse zu bekommen?
Die andere Klasse befindet sich in einem anderem Paket.

Gruß
 
Wenn du eine übergeordnete Klasse hast, die diese Referenz in einer Variablen speichert, ja.

Und wenn deine Klasse, die neue Klasse selbst instantiiert, kannst du ihr mit "this", die Referenz auf deine Klasse mitgeben.
 
(Wenn ich dich richtig verstanden habe)
Du hast ja die Instanz in eine Variable gespeichert. (Oder kannst es tun, falls nicht.)
Die kannst du theoretisch auch kreuz und quer durchs Programm feuern, per Konstruktor, Methoden oder sogar per public Variablen (nicht zu empfehlen).

Oder schau dir mal die Design Patterns in den FAQ an. Vor allem Observer, die Idee fasziniert mich, und sie löst die meisten Abhängigkeiten auf.
 
Danke für eure Antworten.

@ Fu3L:
Ich habe keine übergeordnete Klasse, die die Referenz speichert. (Wär eine Idee)
Und nein, die Klasse wovon ich die Referenz brauche instanziiert nicht die Klasse, wo ich die Referenz brauche.
Kann also leider kein "this" mitgeben.

@Volvagia:
Observer hab ich mir noch nicht angeschaut.
Aber ich bin gerade über Singletons gestolpert.

Ist dieses Erzeugungsmuster veraltet weil es durch static von überall drauf zugreifbar ist ?
 
Nein, Singleton verwendet man, wenn nur eine Instanz existieren darf. Wenn das der Fall ist, kannst du es natürlich auch verwenden.
 
Hmm, na ja.
Woran macht man das fest?
Ohne mein Problem würde nur eine Instanz existieren.
Also wär die Vorgehensweise doch legal ? 😀
 
Verrat uns doch mal ein bisschen mehr zu deinem bisherigen Design. Singletons KÖNNEN unter Umständen duchaus mal ganz praktisch sein, aber darüber streiten sich die Geister (such mal hier im Forum nach, gibt es einige sehr lange Diskussionen zu). Wenn du es anders lösen kannst würde ich das vorziehen - aber um dir da eine Lösung vorschlagen zu können müssten wir halt ein bisschen mehr wissen.
 
Wenn du nur die eine brauchst, kannst dus ruhig machen. Ist auch nicht so wichtig, was legal ist, viel wichtiger ist es, dass du damit auch klarkommst.
 
@ fassy:
Schau dir mal diesen Thread an.

Ich habe eine GUI, auf welcher man Filmdaten eingeben kann.
Die Daten werden in einer HashMap gespeichert.

Da ich Probleme mit dem Konstruktor einer Ressourcen-Klasse habe, such ich eine andere Möglichkeit auf die Filmobjekte (welche ich Ausgeben möchte), zuzugreifen.

Nun bin ich soweit, dass ich die HashMap als Singleton implementiere und sowohl mit der GUI Klasse die Werte reinschreiben kann
als auch mit der Ressourcen-Klasse die Werte (bzw. das Objekt) auslesen kann.
 
Wenn du nur die eine brauchst, kannst dus ruhig machen. Ist auch nicht so wichtig, was legal ist, viel wichtiger ist es, dass du damit auch klarkommst.

Das ist aber genau eins der Probleme mit dem Singleton (Anti-)Pattern.

"Ich weiß nicht woher ich eine Innstanz der Klasse XYZ bekomme. *denk* *denk* *denk* - Ach egal, ich brauch die ja nur einmal also warum nicht mit nem Singleton. Dann bekomm ich bequem die Instanz von überall her."

Eh man sich versieht hat man in einem Projekt plötzlich 4 Singleton Klassen weils ja so schön bequem ist, anstatt sich mal in Ruhe Gedanken zu machen wie man es evtl besser machen könnte.
 
Ich habe eine GUI, auf welcher man Filmdaten eingeben kann.
Die Daten werden in einer HashMap gespeichert.

Da ich Probleme mit dem Konstruktor einer Ressourcen-Klasse habe, such ich eine andere Möglichkeit auf die Filmobjekte (welche ich Ausgeben möchte), zuzugreifen.

Nun bin ich soweit, dass ich die HashMap als Singleton implementiere und sowohl mit der GUI Klasse die Werte reinschreiben kann
als auch mit der Ressourcen-Klasse die Werte (bzw. das Objekt) auslesen kann.

Das klingt jetzt aber eher so nach einem Standard-MVC-Fall und dein Datenmodel als Singleton zu implementieren halte ich für eher schlecht. Nach welchen Prinzip hast du denn die Anwendung aufgebaut, kennst du MVC?
 
Das Problem ist, dass das Projekt bis morgen fertig sein muss.
MVC sagt mir was, ja.

Aber da habe ich zu wenig Erfahrung damit, um das "mal eben so" umzubauen.

Wie gesagt. Die Zeit sitzt mir bissel im Nacken (nein, ich habe nicht erst heute morgen damit angefangen)

Der Stand ist im Moment so, wie 2 Beiträge weiter drüber beschrieben.
Daraus muss ich jetzt irgendwas machen und fertig werden.

Wenn die HashMap als Singleton zu implementieren ganz schlecht ist, dann bräuchte ich aber eine Alternative die ich
1) heute noch umsetzen kann.
und 2) mein Ziel erfüllt. Sprich, ich muss in der Ressource-Klasse das Filmobjekt haben, welches beim Hinzufügen des Filmes, instanziiert wird.
 
Diese Art von Singleton ist sehr schlecht, aber wenn du keine Alternativen kennst/kannst, bleibt dir nix anderes übrig, nimm ein Singleton, und erstarre in Scham wenn du daran denkst oder dich jemand darauf anspricht.
 
Wenn die HashMap als Singleton zu implementieren ganz schlecht ist, dann bräuchte ich aber eine Alternative die ich
1) heute noch umsetzen kann.
und 2) mein Ziel erfüllt. Sprich, ich muss in der Ressource-Klasse das Filmobjekt haben, welches beim Hinzufügen des Filmes, instanziiert wird.

Um dein Ziel zu erfüllen kannst du es so machen. Viele Wege führen nach Rom. Design Fehlentscheidungen rächen sich in der Regel erst viel viel später. Wenn du mal etwas erweitern willst, systematisch Testen, Refactorn usw. Wenn dir das alles egal ist nur um fertig zu werden ist das natürlich eine Lösung - die du irgendwann mal bitter bereuen wirst. 😉
 
Das liegt alles daran, weil ich (noch) nicht richtig mit Jersey umgehen kann. *grml*

Ich könnte auch das Singleton weglassen und die Hashmaps statisch machen *lach*

Habt ihr denn keine annehmbare und in kurzer Zeit realisierbare, Alternative mehr ?
 
Das hat doch nix mit Jersey zu tun, sondern mit GUI Entwicklung und Anwendungsdesign.
Woher die Daten kommen spielt dafür keinerlei Rolle.

Tröste dich (aber nicht aufhören zu schämen 😉), GUI mit MVC/MVP/Passive View ist ein weiterführendes Thema, nciht gerade einfach für den Einstieg.
 

Zurück
Oben