![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 23.11.2005
Beiträge: 8
|
Hallo ich möchte eine Klasse schreiben die bei einem Ereignis an ein Spezielles Objekt mit einer bestimmten implementierten Methode einen Wert bzw ID an die Methode des Objektes liefert. Die Methodik ist bekannt wie z.B. bei Action- Mouse- und anderen Listenern. Zur Veranschaulichung: // Das Interface interface noetigeMethoden { public void incomingAction(int ID); } // Die Hauptklasse class hauptKlasse implements noetigeMethode { public hauptKlasse() { new actionAusloesendeKlasse(this); } public void incomingAction(int ID) { //Auswertung von welchem Objekt die Action kommt. } } // Die Problematik des Action auslösenden Objektes class actionAusloesendeKlasse { private Object home; private int ID; public actionAusloesendeKlasse(Object home,int ID) { this.home = home; this.ID = ID; } public esPassiertWas() { home.incomingAction(ID); } } Wie die meisten schon gemerkt haben, funktioniert das nicht, weil 'actionAusloesendeKlasse' nicht weiß ob das übergebene Object die Methode 'incomingAction(ID)' beinhaltet. D.h. es ist gar nicht möglich home.incomingAction(ID) zu compilieren. Natürlich kann man 'Object' mit 'hauptKlasse' ersetzen und die Implementierung direkt als Methode in die Hauptklasse einfügen. Dies ist dann nicht mehr universell und nicht das was ich programmieren möchte. Also Freunde wie wird das Problem gelöst? Schließlich hat irgendwann mal jemand auch die ganzen Listener etc. programmiert und es funktioniert einwandfrei. Bin dankbar für jede Antwort. |
| | |
| | Nach oben #2 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Statt "Object" als Typen solltest du das Interface verwenden, dafür ist es ja gedacht.
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #3 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
an deiner stelle würde ich das naming auch nochmal überarbeiten... 1. Klassennamen werden immer groß geschrieben noetigeMethoden wird zu NoetigeMethoden 2. Klassen und Methodennamen in einer einheitlichen sprache... du mischst englisch und deutsch, das ist sehr unsauber und kann zu missverständnissen führen... actionAusloesendeKlasse ist gemischte sprache... sollte entwerder aktionAusloesendeKlasse oder actionTriggerClass bzw ActionTriggerClass heißen... am besten verwendet man beim programmieren(egal welche sprache) immer englisch, dann bekommt man auch keine probleme mit sonderzeichen bzw muss nicht immer ue für ü schreiben usw... 3. klassen,methoden und variablen namen sollten für sich sprechen, d.h. selbsterklärend sein. noetigeMethoden sagt nichts darüber aus welche funktion dieses interface hat... sondern lediglich, daß es nötige methoden beinhalten, aber für was sie nötig sind weiß man nicht... hier noch ein bischen überarbeiteter code Code: interface ActionObject
{
public void incomingAction(int ID);
}
// Die Hauptklasse
class MainClass implements ActionObject
{
public MainClass()
{
new ActionTriggerClass(this);
}
public void incomingAction(int ID)
{
//Auswertung von welchem Objekt die Action kommt.
}
}
// Die Problematik des Action auslösenden Objektes
class ActionTriggerClass
{
private ActionObject home;
private int ID;
public ActionTriggerClass(ActionObject home,int ID)
{
this.home = home;
this.ID = ID;
}
public void somethingHappens()
{
home.incomingAction(ID);
}
}
jetzt sollte es auch funktionieren... |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Wert Varible in Listener anderer Klasse nutzen??? | risa | Desktop-Applikationen und Grafik | 1 | 03.04.2006 07:36 |
| MenuItem Action Listener automatisch erzeugen | `B | Desktop-Applikationen und Grafik | 5 | 24.02.2005 11:03 |