Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 05:56

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Java] Ermitteln, welches Objekt eine Methode aufrief

Discussion on [Java] Ermitteln, welches Objekt eine Methode aufrief within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
chrisyou's Avatar
 
elite*gold: 103
Join Date: Jun 2009
Posts: 1,972
Received Thanks: 410
[Java] Ermitteln, welches Objekt eine Methode aufrief

Hallo!

Mein Code:

Code:
private void createComponents() {
	// TODO Auto-generated method stub
	txtRate = new JTextField();
	txtOwn = new JTextField();
        txtForeign = new JTextField();
        btnStart = new JButton(localize());
	createLayout();
}	
private String localize() {
	// TODO Auto-generated method stub
	return null;
}
Ich möchte:
  • per "localize(X)" den Urheber des Methodenaufrufs übermitteln..
  • Und anschließend den Text des JButtons als String zurückgeben (aus localize(X))

localize(this.btnStart) hat nicht funktioniert, daher suche ich Hilfe, wie ich das Objekt übergeben kann..
chrisyou is offline  
Old 11/26/2014, 17:29   #2
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Hi,

an localize() kannst du kein JButton-Objekt übergeben, da du in der Signatur keine Parameter angegeben hast. (Meinst du das?) Den Text vom JButton bekommst du mit JButton.getText().
dowhile is offline  
Old 11/26/2014, 17:32   #3
 
chrisyou's Avatar
 
elite*gold: 103
Join Date: Jun 2009
Posts: 1,972
Received Thanks: 410
Quote:
Originally Posted by dowhile View Post
Hi,

an localize() kannst du kein JButton-Objekt übergeben, da du in der Signatur keine Parameter angegeben hast. (Meinst du das?) Den Text vom JButton bekommst du mit JButton.getText().
Ich möchte ja nicht nur JButtons übergeben, sondern z.B. auch JLabel.
localize(JObject obj) scheint nicht zu funktionieren..

Den Text gebe ich ja als String an den Kontruktor des Objekts zurück.

Edit: Nvm, geht es vielleicht nicht, weil das Objekt selbst (der JButton) an der Stelle noch gar nicht exisitert bzw. noch konstruiert wird?
chrisyou is offline  
Old 11/26/2014, 17:41   #4
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Achso, jetzt verstehe ich das. Das geht nicht, denn wenn du den Konstruktor aufrufst, hast du schließlich noch gar kein Objekt.
Du kannst statt dem Objekt aber irgendeinen String (int) übergeben, der dein Objekt eindeutig identifiziert, und localize kann dazu den passenden String zurückgeben. So macht das zum Beispiel auch Android (dort: resources.getString(R.strings.XYZ)).

Oder du legst das Objekt zu erst an und nutzt dann setText(): btnStart.setText(localize(btnStart));
Du hast dann aber keine Möglichkeit, zwischen verschiedenen JComponent-Objekten zu unterscheiden. Also doch lieber wie oben (oder ganz anders).
dowhile is offline  
Old 11/26/2014, 17:46   #5
 
chrisyou's Avatar
 
elite*gold: 103
Join Date: Jun 2009
Posts: 1,972
Received Thanks: 410
Quote:
Originally Posted by dowhile View Post
Achso, jetzt verstehe ich das. Das geht nicht, denn wenn du den Konstruktor aufrufst, hast du schließlich noch gar kein Objekt.
Du kannst statt dem Objekt aber irgendeinen String (int) übergeben, der dein Objekt eindeutig identifiziert, und localize kann dazu den passenden String zurückgeben. So macht das zum Beispiel auch Android (dort: resources.getString(R.strings.XYZ)).

Oder du legst das Objekt zu erst an und nutzt dann setText(): btnStart.setText(localize(btnStart));
Du hast dann aber keine Möglichkeit, zwischen verschiedenen JComponent-Objekten zu unterscheiden. Also doch lieber wie oben (oder ganz anders).
Danke, ist mir auch eben aufgefallen.
Werde mir die Methode mal ansehen, habe jetzt aber erstmal alle Objekte erstellt und starte anschließend localize().
So findet auch nur eine Operation statt, statt viele (bei jedem Objekt).

Grüße
chrisyou is offline  
Old 11/28/2014, 01:07   #6
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Hab mir die Texte nun mehrfach durchgelesen und habe noch immer keine Ahnung, was du da eigentlich vor hast

Vielleicht hilft dir das weiter:
- du kannst die eigene Klasse mittels "this" weitergeben
- du kannst Objekte jeder Art mit einem Parameter vom Typ "Object" übergeben, auch wenn sie die spezifischen Klassenattribute und -methoden verlieren.

Kannst du genauer erläutern, was du denn vor hast?
Mikesch01 is offline  
Old 11/28/2014, 02:38   #7
 
elite*gold: 22
Join Date: Feb 2012
Posts: 576
Received Thanks: 332
erweitere doch die Klassen der Objekte um eine funktion localize erweitern
VisionEP1 is offline  
Old 11/28/2014, 08:21   #8
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
Du kannst das Decorator -oder Factory-Pattern anwenden, dies sollte dein Problem um großes reduzieren.
XxharCs is offline  
Old 11/28/2014, 12:22   #9


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by XxharCs View Post
Du kannst das Decorator -oder Factory-Pattern anwenden, dies sollte dein Problem um großes reduzieren.
Wieso sollten Patterns wie das Factory pattern hier die Lösung sein? Es geht sehr wohl ohne - man nutzt solche Prinzipien nur wenn man sie auch wirklich braucht, selbes Spiel wie bei Singletons.
Mostey is offline  
Old 11/28/2014, 14:44   #10
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
Quote:
Originally Posted by Mostey View Post
Wieso sollten Patterns wie das Factory pattern hier die Lösung sein? Es geht sehr wohl ohne - , selbes Spiel wie bei Singletons.
Nur das das Singleton hier wenig bis garnichts bringen würde.
Wieso ich das Factory oder Decorator Pattern empfehle?

Ganz einfach, zur Zeit der Erstellung weiß er nicht welches Objekt er bekommen wird, nur zur Laufzeit wird er wissen welches Objekt da angesprochen werden soll. Mit Factory oder Decorator kann er sein Problem ganz leicht lösen können.

Quote:
Originally Posted by Mostey View Post
man nutzt solche Prinzipien nur wenn man sie auch wirklich braucht
Die Prinzipien bzw. Patterns sind da, um einem Programmierer das Leben leicht zu machen, beim programmieren selbst als auch später in der Zukunft wenn man den Code warten will usw. Man muss sie nicht anwenden, sollte man aber, wie schon im vorherigen Satz erläutert wieso. Manche Patterns sind irgendwo unnötig, manche aber widerrum nicht, kommt auf den Anwendungsbereich an.

Stell dir vor er will das bei vielen Components machen, am Ende wird er cik tausend Klassen haben um sein Problem zu lösen. Mit dem Decorater zB wird er dies sehr klein halten können und wird beim hinzufuegen neuer Sachen kein Problem haben, weil er bestehenden Code nicht angreift, keinen Gulasch aus Klassen haben wird usw.
XxharCs is offline  
Thanks
1 User
Old 11/28/2014, 21:45   #11


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by XxharCs View Post
Nur das das Singleton hier wenig bis garnichts bringen würde.
Und genau das hat niemand behauptet. Meine Aussage bezog sich darauf das viele Leute das Singleton Pattern nutzen, obwohl sie das entweder nicht müssen oder ihren Code unnötig gefährden.

Quote:
Originally Posted by XxharCs View Post
Wieso ich das Factory oder Decorator Pattern empfehle?

Ganz einfach, zur Zeit der Erstellung weiß er nicht welches Objekt er bekommen wird, nur zur Laufzeit wird er wissen welches Objekt da angesprochen werden soll. Mit Factory oder Decorator kann er sein Problem ganz leicht lösen können.
Woher nimmst du das? Er hat oben beschrieben dass es wohl ein Button oder Label sein wird. Und wenn es mehrere Elemente sein können, dann nimmt man eben die Überklasse (und die ist bei Java doch JObject, oder?)

Und das der Ansatz von ihm totaler Müll ist, UI bezogene Objekte an die Business layer zu übergeben, schafft nahezu unwartbaren Code aber das ist eine andere Geschichte.

Quote:
Originally Posted by XxharCs View Post
Die Prinzipien bzw. Patterns sind da, um einem Programmierer das Leben leicht zu machen, beim programmieren selbst als auch später in der Zukunft wenn man den Code warten will usw. Man muss sie nicht anwenden, sollte man aber, wie schon im vorherigen Satz erläutert wieso. Manche Patterns sind irgendwo unnötig, manche aber widerrum nicht, kommt auf den Anwendungsbereich an.
Wieso sollte man? Es gibt eine Grundregel bei diesen Patterns: Nutze sie, wenn du sie brauchst. Wenn du sie nicht brauchst, nutze sie auch nicht. Das hat nicht umsonst Gründe. Ich kenne dieses Decorator Pattern zum Beispiel überhaupt nicht. Wieso soll ich eigentlich lernen wie dieses Pattern funktioniert obwohl es nicht unbedingt benötigt wird? Ich meine - wo ist der Vorteil gegenüber einer Basisklasse die du einfach in den Methoden voraussetzt?

Wieso soll ich meinen Scope mit Singleton Klassen verschmutzen die am Ende eigentlich gar nicht unbedingt nach dem Singleton Prinzip funktionieren müssen?

Quote:
Originally Posted by XxharCs View Post
Stell dir vor er will das bei vielen Components machen, am Ende wird er cik tausend Klassen haben um sein Problem zu lösen. Mit dem Decorater zB wird er dies sehr klein halten können und wird beim hinzufuegen neuer Sachen kein Problem haben, weil er bestehenden Code nicht angreift, keinen Gulasch aus Klassen haben wird usw.
Wieso sollte man überhaupt Komponente die zum UI gehören nach unten geben wollen? Und wenn es so wäre, was hindert ihn (wie oben schon erwähnt) an einer Basisklasse oder einem Interface? Ich sehe den Fehler hier einfach nur im Design.
Mostey is offline  
Old 11/29/2014, 02:36   #12


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Und das der Ansatz von ihm totaler Müll ist, UI bezogene Objekte an die Business layer zu übergeben, schafft nahezu unwartbaren Code aber das ist eine andere Geschichte.
Lokalisierung ist keine Business Logic, sondern Oberflächenlogik, also ist das vollkommen legitim.
Das Factory Pattern ist hier dennoch völlig am Thema vorbei - es geht nicht um Objekterstellung, sondern um die Zuweisung von lokalisierten Strings zu bestimmten Controls.

Quote:
Wieso sollte man? Es gibt eine Grundregel bei diesen Patterns: Nutze sie, wenn du sie brauchst. Wenn du sie nicht brauchst, nutze sie auch nicht. Das hat nicht umsonst Gründe. Ich kenne dieses Decorator Pattern zum Beispiel überhaupt nicht. Wieso soll ich eigentlich lernen wie dieses Pattern funktioniert obwohl es nicht unbedingt benötigt wird? Ich meine - wo ist der Vorteil gegenüber einer Basisklasse die du einfach in den Methoden voraussetzt?
Zwar ist es Unsinn auf Teufel komm raus Patterns in den Code klatschen zu wollen, aber deine Logik ist hier auch nicht wirklich schlüssig. Woher will ich wissen, ob mein Code durch ein Pattern verbessert werden könnte, wenn ich es gar nicht kenne? Die Frage "Warum sollte ich das lernen?" ist immer Schwachsinn, da zusätzliches Wissen niemals schadet.
MrSm!th is offline  
Thanks
2 Users
Old 11/29/2014, 12:40   #13


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by MrSm!th View Post
Lokalisierung ist keine Business Logic, sondern Oberflächenlogik, also ist das vollkommen legitim.
Wieso? Sobald du ein Buttonobjekt nach unten weitergibst, befindest du dich in der Business Layer und bist somit in der Interaktion zwischen UI und Daten. Ich bleibe dabei, es ist absolut unangebracht.

Quote:
Originally Posted by MrSm!th View Post
Das Factory Pattern ist hier dennoch völlig am Thema vorbei - es geht nicht um Objekterstellung, sondern um die Zuweisung von lokalisierten Strings zu bestimmten Controls.
Was natürlich auch sehr klar und deutlich vom TE formuliert wurde...

Quote:
Originally Posted by MrSm!th View Post
Zwar ist es Unsinn auf Teufel komm raus Patterns in den Code klatschen zu wollen, aber deine Logik ist hier auch nicht wirklich schlüssig. Woher will ich wissen, ob mein Code durch ein Pattern verbessert werden könnte, wenn ich es gar nicht kenne?
Ich habe nicht gesagt das ich es nicht kenne, ich weiß sehr wohl was Sinn und Zweck davon ist - nicht aber, wie man es vernünftig anwendet. Daher macht meine Logik schon irgendwo Sinn, meinst du nicht?

Quote:
Originally Posted by MrSm!th View Post
Die Frage "Warum sollte ich das lernen?" ist immer Schwachsinn, da zusätzliches Wissen niemals schadet.
Es kostet Zeit - Zeit die begrenzt ist. Nehmen wir als Beispiel doch mal ein Projekt in deiner Firma. Nun kam jemand auf die Idee, tausende von Patterns in deiner Lieblingssprache zu implementieren die nicht unbedingt benötigt wurden und durch einfache Konstrukte in der Sprache selbst ersetzt werden könnten. Du kennst ein Großteil dieser Patterns aber nicht - also hast du einen deutlichen Mehraufwand beim Verständnis wenn du den Code ändern musst. Und da kannst du mir erzählen was du willst, das betrifft ebenfalls so gut wie alle Frameworks.

Immer Schwachsinn? Alles klar...
Mostey is offline  
Old 11/29/2014, 18:46   #14
 
elite*gold: 22
Join Date: Feb 2012
Posts: 576
Received Thanks: 332
Auch wenn Mr. Unantastbar anderer Meinung ist,
die oben vorgeschlagene Lösung ist durchaus angebracht.
Moesty hat das meiste ja schon gesagt.
Zu welcher Lösung du greifst hängt nochmal von deinem Projekt ab,
Es gibt ja de fakto mehr als nur die perfekte Programmier argumentation
-Wartbarkeit(verwendungszweck)
-Zeitaufwand
-Größe des Projekts
Musst du abwägen und kannst so zum richtigen Schluss kommen
VisionEP1 is offline  
Old 11/29/2014, 21:41   #15


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Wieso? Sobald du ein Buttonobjekt nach unten weitergibst, befindest du dich in der Business Layer und bist somit in der Interaktion zwischen UI und Daten. Ich bleibe dabei, es ist absolut unangebracht.
Nein, Lokalisierung ist Oberflächenlogik und keine direkte Geschäftslogik.

Quote:
Was natürlich auch sehr klar und deutlich vom TE formuliert wurde...
Mindestens zwei haben es verstanden, aber da hast du nicht Unrecht.

Quote:
Ich habe nicht gesagt das ich es nicht kenne
->
Quote:
Ich kenne dieses Decorator Pattern zum Beispiel überhaupt nicht
Aha?

Quote:
ich weiß sehr wohl was Sinn und Zweck davon ist - nicht aber, wie man es vernünftig anwendet. Daher macht meine Logik schon irgendwo Sinn, meinst du nicht?
Nein, das ändert nicht wirklich etwas am Sachverhalt. Wenn man eine Wissenslücke hat, sollte man sie füllen und nicht sagen, dass es eh unnötig ist.
Es gäbe das Pattern nicht, wenn es sich nicht vernünfig anwenden ließe.

Quote:
Es kostet Zeit - Zeit die begrenzt ist. Nehmen wir als Beispiel doch mal ein Projekt in deiner Firma. Nun kam jemand auf die Idee, tausende von Patterns in deiner Lieblingssprache zu implementieren die nicht unbedingt benötigt wurden
Ab hier wird das Beispiel schwachsinnig und zeigt, dass du den Kern des Problems nicht erkannt hast. Ich habe ganz klar und deutlich gesagt, dass es nicht darum geht, den Code mit Patterns vollzukleistern. Ich sagte, dass es nie schaden kann, möglichst viele zu kennen. Erst durch ein solides Grundwissen kann man auch in der Praxis effizient arbeiten. Patterns sind letztendlich nichts anderes als Muster von Lösungen, die Entwickler vor dir auf immer wieder vorkommende Probleme gefunden haben. Es sind Schablonen, die sich für diese Arten von Problemen sehr gut durchgesetzt haben. Diese zu kennen ist immer sinnvoll, um das Rad nicht ständig neu zu erfinden. Nicht umsonst gibt es ganze Studiengänge alleine über die Architektur von Software. Das ist einer der Unterschiede zwischen einem Entwickler und einem Code Monkey.

Übrigens: Wenn man ein Pattern nicht kennt, ist der Code nicht direkt unverständlich, im Gegenteil. Patterns helfen, die teils komplexen Lösungen und Gedankengänge dahinter in ein gemeinsames Vokabular zu fassen. Leute, die sie nicht kennen, haben davon dann zwar keinen Mehrwert, aber auch keinen Schaden, denn ohne Pattern wäre das Vokabular genau so wenig da.
MrSm!th is offline  
Reply


Similar Threads Similar Threads
[Java] Während Methode Fenster öffnen und Variable ablesen
01/26/2014 - Java - 15 Replies
Hey, in meinem Programm läuft ne Methode ab. Irgendwann muss dann ein Key eingelesen werden. Ich bekomme es aber einfach nicht hin, dass sich in meiner Methode irgendwann ein simples Fenster öffnet, das ein Text Feld, ein Label und einen Knopf enthält und beim Knopf Druck den Text aus dem Feld einliest und als String speichert, welcher in dann in meiner Methode weiter verwendet werden soll. Wäre cool wenn mir jemand helfen kann :)
[JAVA]Kann man diese Methode vereinfachen?
08/27/2013 - General Coding - 4 Replies
Die funktioniert zwar tadellos, schaut aber ein wenig kompliziert aus^^ (Ja, ich hab die selber gebaut) Bzw wenig unleserlich, was da genau abgeht. Hat jemand nen Vorschlag, wie man das vereinfachen könnte? /** * It formats a specified Time in milliseconds to Format HH:MM:SS * * @param milliseconds Time in Milliseconds which have to get formatted * @return Returns the Milliseconds in Format HH:MM:SS */ public String getFileTimeFormatted(long milliseconds) {...
Java | Objekt klonen
03/07/2013 - General Coding - 7 Replies
Hallo, ich habe folgende Aufgabe : Ich habe eine Klasse geschrieben und soll dort jetzt eine Klon-Methode hinzufügen, welche das Objekt klont. Wie mach ich das? :/ Wäre nett wenn zum Code noch eine Erklärung kommt, weil ich auch was lernen möchte.
Welches Objekt bringt im Handelsposten viel Cash :D
10/31/2012 - Guild Wars 2 - 3 Replies
Hallo Leute, ich habe in letzter Zeit viel Gold im Handelsposten durch kaufen und teurer verkaufen gemacht. Ca. 90 Gold :D Ich habe bis jetzt immer Materialien gefunden, mit denen ich gut handeln konnte. Aber jetzt finde ich kein einziges mehr :( Kennt ihr ein Item, welches maximal 30 bronze kostet und welches man sehr gut billig einkaufen und teurer verkaufen kann? Oder auch ein teureres aber der Preis sollte sehr stabil und sicher sein. vielen Dank Posted from elitepvpers.com App...
Java Problem mit einer Methode
10/21/2011 - General Coding - 4 Replies
Hi, ich habe hier ein Problem mit der Methode umdrehen... sie funktioniert nicht und ich weiß nicht was man da noch machen könnte public class Zahlenarray { private int zahlen; public Zahlenarray() { zahlen = new int; for(int i = 0; i<5;i++) { zahlen = (int)(Math.random()*10+0);



All times are GMT +1. The time now is 05:56.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.