generische Listener

Status
Nicht offen für weitere Antworten.

maximilius

Mitglied
Ich schreibe gerade eine Anwendung, bei der viele Listener-Interfaces entstehen werden.
Viele der Listener können dann bei der Klasse IrcCommunicator angemeldet werden.
Für die Anmeldung und Nutzung des ersten Listeners habe ich schon die Implementierung geschrieben:
Java:
public class IrcCommunicator extends PircBot {

	protected Vector<MessageListener> messageListeners;
	
	public IrcCommunicator(String loginName) {
		messageListeners = new Vector<MessageListener>();
		setName(loginName);
		setLogin(loginName);
	}
	
	public void addMessageListener(MessageListener newMessageListener) {
		if (newMessageListener != null) {
			messageListeners.add(newMessageListener);
		}
	}
	
	public void removeMessageListener(MessageListener aMessageListener) {
		messageListeners.remove(aMessageListener);
	}
	
	@Override
	protected void onMessage(String channel, String sender, String login, String hostname, String message) {
		for (MessageListener currentMessageListener : messageListeners) {
			currentMessageListener.onMessage(channel, sender, login, hostname, message);
		}
	}
}
Wenn ich jetzt weitere Listener auf die gleiche Art und Weise einfügen würde (Beispielsweise einen ChannelListener), würde ich das DRY-Prinzip verletzen (Dont Repeat Yourself), da der Algorithmus zum an- und abmelden der Listener der gleiche wär.
Gibt es hier die Möglichkeit, generische Typen einzusetzen?
Wenn ja, wie? Diese sind Neuland für mich.

lg Stephan
 
S

SlaterB

Gast
das wird zu nix führen, schon gar nicht falls du

addListener(beliebiger Typ) {
speichere in richtiger Liste;
}

vorhast, getter + setter oder hier einfaches add/ remove kannst du kopieren wie du lustig bist,
das ist kein wertvoller Code/ wertvolles Wissen,

wenn dagegen in den Methoden noch irgendeine individuelle Zeile dazukommt, etwa in jedem add()
'if listener.isSpeakingLanguage(irc)'
dann wird's bisschen unangenehm,

aber auch dann schlage ich keine großen generischen Sprünge vor, ein einfaches

Code:
 public void addMessageListener(MessageListener newMessageListener) {
       addTo(this.messageListeners, newMessageListener);
 }

 public void addAnswerListener(AnswerListener newAnswerListener) {
       addTo(this.answerListeners, newAnswerListener);
 }

 public void addTo(List list, BaseListener listener) {
    ...
 }
kann auch schon was bewirken,
ok, addTo() könnte man generisch machen:

Code:
 public <T extends BaseListener> void addTo(List<T> list, T listener) {
    ...
 }

oder statt einer normalen Liste/ Vector eine spezielle Klasse definieren, die in ihrer add-Methode prüft
 
Zuletzt bearbeitet von einem Moderator:

maximilius

Mitglied
Schade, genau das schwebte mir vor:
das wird zu nix führen, schon gar nicht falls du

addListener(beliebiger Typ) {
speichere in richtiger Liste;
}

vorhast

Die add- und remove-Methoden sind zwar kein wertvoller Code, aber nehmen wir mal an, ich habe schon 5 Listener implementiert und dann fällt mir auf, das ich noch ein if (listener != null) einbauen muss, habe ich dennoch die Probleme, die auftreten, wenn ich das DRY-Prinzip verletze. (Ich muss an 5 Stellen redundanten Code ändern)

Die addTo() Methode ist da schon ein Schritt in die richtige Richtung. Danke.

lg Stephan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Generische Listener und Sender Allgemeine Java-Themen 12
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
J Generische Interface - Problem Allgemeine Java-Themen 3
J Generische Interfaces mehrfach einbinden Allgemeine Java-Themen 11
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
C generische Authentifizierung Allgemeine Java-Themen 7
JCODA Generische Map Frage Allgemeine Java-Themen 10
H Generische Array Allgemeine Java-Themen 11
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
D Methode für generische enummap/enum Allgemeine Java-Themen 10
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
M Generische Klassen Allgemeine Java-Themen 3
S Generische Typen: Frage dazu Allgemeine Java-Themen 11
H generische Klasse Realtion Allgemeine Java-Themen 2
T Ideenfindung: Generische Transportklasse? Allgemeine Java-Themen 3
C Generische Methode (Schablone) Allgemeine Java-Themen 8
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
B Generische Typen instanzieren Allgemeine Java-Themen 11
M Generische Datentypen Allgemeine Java-Themen 14
S Generische Liste Allgemeine Java-Themen 30
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
S Generische Methode Allgemeine Java-Themen 13
R Frage zu einfügen in generische lineare Liste Allgemeine Java-Themen 7
S Generische Methoden Allgemeine Java-Themen 7
D Statische, generische Methode will nicht. Allgemeine Java-Themen 2
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
L Wie programmiert man einen Listener? Allgemeine Java-Themen 1
S Threads Serielle Schnittstelle mit Listener / Aufrufendes GUI Allgemeine Java-Themen 4
H Listener Verständnisproblem Allgemeine Java-Themen 5
D Action Listener Problem Allgemeine Java-Themen 3
S Key Listener mit Strg + s Allgemeine Java-Themen 12
K Threads Listener für Future finish Allgemeine Java-Themen 2
TheWhiteShadow Listener Reihenfolge Allgemeine Java-Themen 4
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
E Bild mit Listener einfügen Allgemeine Java-Themen 3
P Listener für Tastatureingaben ohne Focus Allgemeine Java-Themen 4
serjoscha WatchDog Thread und Listener Allgemeine Java-Themen 10
hdi Listener für Desktop-Veränderungen Allgemeine Java-Themen 7
T JTextField in Listener leeren Allgemeine Java-Themen 2
lenniii Listener & JList Allgemeine Java-Themen 3
K Key listener ohne Fokus aktiv behalten ? Allgemeine Java-Themen 12
G Code-Convention für Listener Allgemeine Java-Themen 2
T Observer vs Listener Allgemeine Java-Themen 18
S Listener Allgemeine Java-Themen 3
P Abstrakte Elternklasse als Listener Allgemeine Java-Themen 6
MQue KeyAction listener Allgemeine Java-Themen 2
S Listener für Kalender Allgemeine Java-Themen 2
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
J Listener für Ende eines Threads gesucht... Allgemeine Java-Themen 5
S Listener Implentierung bei Eingabe in Textfeld Allgemeine Java-Themen 2
G Objekt einer inneren Klasse als Listener Allgemeine Java-Themen 3
D Boolean Listener? Allgemeine Java-Themen 28
M Listener und Performance Allgemeine Java-Themen 9
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
G Listener auf aktuelles Datum / Uhrzeit Allgemeine Java-Themen 2
Escorter Eigenen Listener schreiben Allgemeine Java-Themen 3
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
T SelectionProvider und Listener Frage Allgemeine Java-Themen 14
I Listener, der zeitlich-periodisch aufgerufen wird Allgemeine Java-Themen 3
B Listener dynamisch setzen Allgemeine Java-Themen 6
A Listener Tastatur Allgemeine Java-Themen 3
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
D Thread vs Listener Allgemeine Java-Themen 6
K Listener einem Objekt hinzufügen Allgemeine Java-Themen 3
S Listener-Problematik in komplexem Projekt Allgemeine Java-Themen 2
I Listener/Event selber machen. Allgemeine Java-Themen 4
M Time Listener ? Allgemeine Java-Themen 2
Z Zwei Listener zwischen zwei Klassen Allgemeine Java-Themen 4
B statusbar update -> mit thread oder listener? Allgemeine Java-Themen 7
M Action-listener Allgemeine Java-Themen 6
M Bean Listener hinzufügen und Methode später überschreiben Allgemeine Java-Themen 27
G Flavor-Listener Allgemeine Java-Themen 6
E Listener für Änderung der Fenstergröße Allgemeine Java-Themen 3
W Listener an ein beliebiges Objekt hänger, der mir Änderung Allgemeine Java-Themen 8
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
A HILFE: subclass von Hashtable mit listener aufstellen Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben