Ist es möglich, Typvarianz in CDI-Ereignissen zu verwenden? Hier ist der Fall:
MyEvent
und Unterklasse DummyEvent
List<? extends MyEvent>
mit DummyEvent
instances Wie kann ich das tun?
Wenn ich bei jedem Ereignis durch die Sammlung rufe, die fire()
aufruft, wird @Observes MyEvent evt
aber nicht @Observes DummyEvent evt
Methoden aufgerufen.
** Aktualisierung **
Erstellt einen Beispielcode, um das Problem zu klären:
Ich möchte, dass das Ereignis zweimal ausgelöst wird, einmal einzeln und einmal aus der Liste.
Mhh Ich verstehe es nicht ... Wie sieht dein Code aus, um das Event zu feuern? ASFAIK injizieren Sie die Schnittstelle javax.enterprise.event.Event und übergeben Sie eine Instanz an ihre fire-Methode, die damit den aufgerufenen Beobachter deklariert. Und wenn eine Vererbung involviert ist, würden beide Observer aufgerufen werden, wenn Sie ein DummyEvent auslösen. Wenn Sie die Ereignisse weiter spezifizieren möchten, würden Sie Qualifier verwenden.
%Vor%/ * bearbeiten * /
Das "Problem" ist die folgende Codezeile:
%Vor%Sobald Sie den Ereignistyp (MyEvent.class) angeben, spielt der Typ der tatsächlichen Ereignisinstanz (evt) keine Rolle mehr. Eine Möglichkeit ist es, den Klassenhirach mit Qualifiern zu erweitern. ZB:
%Vor%Danach spezifizieren Sie den Beobachter weiter:
%Vor%Schließlich, wenn Sie gerade Zugriff auf Basisklassen haben, wie in Ihrem Beispiel, wo Sie durch eine Liste gehen, können Sie den genauen Typ / Qualifier angeben, bevor Sie das Ereignis wie folgt auslösen:
%Vor%Wie oben erwähnt, wenn Sie einen allgemeinen Beobachter haben (siehe unten), wird er für jedes Ereignis aufgerufen.
%Vor%Tags und Links java-ee events java-ee-6 cdi jboss-weld