instanceof oder was anderes?

darkeye2

Bekanntes Mitglied
Hallo,

ich habe eine abstrace klasse Events diese wird von vielen anderen kalassen impimentiert z.b.:
NativeObserveEvent, FtpExceptionEvent, ...

nun möchte ich in einer anderen kalsse eine arraylist haben in der ich alle events speichen kann, sollte ja eigentlich so funktionieren :
ArrayList<Events> quee = new ArrayList<Events>();

wie kann icht nun aber überprüfen ob ein Event, aus dieser liste jetzt ein NativeObserveEvent oder sonst ein Event ist?

(Bitte verbessern, wenn ich bereits jetzt nen Denkfehler drin habe.)
 

Marco13

Top Contributor
Eigentlich nur mit instanceof (von solchen Sachen wie einer Methode "getType", die ein Enum zurückliefert oder so mal abgesehen). Die spannende Frage: An welchen Stellen musst du (warum) den Event-Typ kennen?
 
M

Marcinek

Gast
Nur das Programm, das auch auf dieses spezielle Event wartet muss die konkrete implementierung kennen.

Der queue sollte es gänzlich egal sein. Wenn du dabei bist ewige lange instanceof if-elese konstrukte zu bauen, dann machst du was falsch.
 

darkeye2

Bekanntes Mitglied
nein, es geht nicht um eine lange liste, es geht nur darum, wenn ich aus der warteschlange das nächste event von einem bestimmten typ haben will, irgendwie krieg ich das mit instanceof net hin, ich kriege als parameter immer den String, der den richtigen klassennamen angibt (z.b. NativeObserverEvent) wie kann ich nun abfragen, ob eine event jetzt ein NativeObserverEvent ist?
 

Marco13

Top Contributor
Java:
ArrayList<Events> queue = new ArrayList<Events>();
...
Events e = queue.get(0);
if (e instanceof NativeObserveEvent)
{
    NativeObserveEvent n = (NativeObserveEvent)e;
    ...
}

Manchmal kommt man nur schwer um ein instanceof drumrum, aber nochmal: Wozu brauchst du das?
 
M

Marcinek

Gast
So funktioniert das EventDispatching nicht..

Es gibt einen sender und einen empfänger.

Wenn du nun alles erst zusammenführst in eine queue und dann die emfänger anhand des typs bestimmst, dann ist das nicht korrekt.

Der sender sollte direkt an dem empfänger schicken.
 
B

bygones

Gast
ich unterstreiche das wozu nochmal ;-)

von der grundlage die Marcinek schon angesprochen hat... wenn du unbedingt (?!) untersch. Events wissen musst dann wäre es falsch sie in einer Liste zusammenzuschustern nur um dann sie wieder auseinander zu bekommen.... also wenn es wirklich so ist dass du untersch. Events wissen musst, dann auch mehrere Liste.

aber wie schon gesagt... kommentare oben
 

darkeye2

Bekanntes Mitglied
also ich habe ein methode die in der klasse Events drin ist und somit in allen klassen, die events impimentieren, alle ankommenden events kommen die die queue und werden von dort von einer klasse namens EventProzessor der reihe nach entnommen und die methode getReason und getParameter wird aufgerufen (ist in jeden Event drin) doch manchmal (selten aber kommt vor) muss unbedingt geschaut werden ob ein bestimmtes event in der warteschlange ist und dieses muss dann entnommen und bearbeitet werden.
 
M

Marcinek

Gast
1. Wenn ich in der Qualität deine Fragen beantworten würde, dann würdest du dich beschweren.

2. Nachdem ich nun mehrfach das versucht habe zu verstehen, was da steht. Denke ich immernoch, dass die implementierung mit so einem Zentralen Eventmanagement nicht die beste Lösung ist.

Ansonsten kannst du mit instanceof oprüfen, oder du implementierst eine Methode getType().
 

Marco13

Top Contributor
Naja, ein Zentrales Eventmanagement gibt es ja schon oft. Auch Swing hat "nur eine" EventQueue. Wenn ich das richtig sehe, gibt es da jetzt mehrere Möglichkeiten:
- instanceof (ich erwähne nur, dass es geht...)
- getType (auch das sei nur erwähnt)
- Ein Event-Interface/abstrakte Event-Basisklasse, die eine Methode "boolean mussRausgenommenWerden()" hat
- Prioritäten für Events (die wichtigen werden zuerst rausgeholt)
- Zwei Event-Queues, und die "Normale" wird nur abgearbeitet, wenn in der anderen keine Events liegen
...
Andere mögen die Liste nach belieben ergänzen ;)
 
M

Marcinek

Gast
Naja, ein Zentrales Eventmanagement gibt es ja schon oft. Auch Swing hat "nur eine" EventQueue. Wenn ich das richtig sehe, gibt es da jetzt mehrere Möglichkeiten:

Es hier aber alles die "gleichen" Events.

Nämlich die eines Users / Systems an den Swing Worker, damit iwas gemacht wird.

In dem Fall des TOs werden alle möglichen Events gesammelt.. Und sollen dann evaluiert werden. :bahnhof:
 

darkeye2

Bekanntes Mitglied
Also zur erklärung, das es scheinbar immer noch net ganz klar ist, was ich da mache:
In meinen Programm gibt es 2 arten von Ereignissen, die einen sind standartzeug, was eben so anfällt (klicks auf buttons, ...) und halt die ereignisse, die programmintern passieren. Die "internen" Ereignisse, müssen alle abgearbeitet werden, aber nicht unbedingt dann wenn sie auftreten und schon gar nicht von dem Thread, wo sie auftreten. Alle arbeitenden Threads (2-4 stück) müssen immer wieder an einen Thread Ereignisse übergeben, diese werden in der warteschlange gespeichert/ abgelegt. Wenn der EventHandler Thread nun normal arbeitet holt er ein Event nach dem anderen raus und ruft die 3 benötigten Methoden auf, diese sind immer gleich (zumindest vom namen her) und somit funktioniet dass auch ganz gut.

Nun kann es passierten dass einer der Arbeitenden Threads was ausführen will, was net geht, das ein vorher gesendetes Event noch nicht behandelt wurde. Es ist dem arbeitsThread ja bekannt, was für ein event das ist und es wird eine anfrage an den eventhandler gemacht. Dieser muss nun ein event diesen typs aus der liste holen und ausführen, das passiert nur selten aber es muss trotzdem möglich sein.

Prioritäten hab ich auch in der warteschlange ...

So ich hoffe es ist nun zumindest verständlich wozu ich das brauche, und die Events sind nicht "alle möglichen events" sonder sind sich alle irgendwo ähnlich und sollen deswegen auch in eine einzigste warteschlange.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 9
M instanceof bei generischer Methode Allgemeine Java-Themen 3
E instanceof mit nicht öffentlichen Klassen Allgemeine Java-Themen 2
J instanceof vermeiden und stattdessen dynamisch binden Allgemeine Java-Themen 6
M Vermeiden von instanceof Abfragen Allgemeine Java-Themen 3
S Kompositum Muster ohne Exception oder instanceof Operator Allgemeine Java-Themen 6
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
P instanceof mit variabler klasse Allgemeine Java-Themen 3
G Probleme mit ÜbergabeParameter für instanceof Allgemeine Java-Themen 3
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
T Generics und instanceof Allgemeine Java-Themen 10
M Ersatz fuer instanceof Allgemeine Java-Themen 11
Y instanceof unschön ! Allgemeine Java-Themen 6
J instanceof vermeiden Allgemeine Java-Themen 10
S instanceof und null Allgemeine Java-Themen 7
S instanceof mit genrics Allgemeine Java-Themen 3
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
Anfänger2011 Java Server oder lieber was anderes Allgemeine Java-Themen 16
C anderes Programm schließen! Allgemeine Java-Themen 5
J System.arraycopy ergibt anderes Resultat als for-loop Allgemeine Java-Themen 4
J Java Auf anderes Programm warten Allgemeine Java-Themen 9
A Anderes Fenster neu laden Allgemeine Java-Themen 16
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
B Input/Output Schneller Sort mit wenigen Zugriffen (oder was anderes?) Allgemeine Java-Themen 3
M Graphen erzeugen und visualisieren, jgraph oder was was anderes? Allgemeine Java-Themen 2
C Mit Java in einem anderes Programm eingreifen Allgemeine Java-Themen 21
M Nach Programmdurchlauf werden Zeichen falsch dargestellt + Anderes Verhalten unter Windows Allgemeine Java-Themen 6
F Anderes Java-Programm aufrufen Allgemeine Java-Themen 2
S jConsole oder anderes Monitoring Tool Allgemeine Java-Themen 5
C Datenbank - Textfiles - Anderes Allgemeine Java-Themen 34
X Warum kann ich keine ZIP Datein mit renameto() in was anderes benennen? Allgemeine Java-Themen 13
C Anderes Programm aus Taskleiste in Vordergrund bringen Allgemeine Java-Themen 2
V Anderes tmp-dir bei jars? Allgemeine Java-Themen 2
G System.out und String machen was anderes Allgemeine Java-Themen 5
M Eigene .jar in anderes Programm importieren[eclipse] Allgemeine Java-Themen 6
MQue Array in ein anderes Array kopieren Allgemeine Java-Themen 5
N Array Element vom Typ eines Objekts zeigt auf ein anderes A. Allgemeine Java-Themen 4
G Jar File soll anderes benutzen Allgemeine Java-Themen 3
N Wie parameter von java aus an anderes Programm übergeben? Allgemeine Java-Themen 7
K Datum in ein anderes Format bringen Allgemeine Java-Themen 5
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
T Musikdateien in ein anderes Musikdateienformat konvertieren Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben