Mhh私はそれを取得しません...あなたの実際のコードはどのようにイベントを発射するように見えるのですか? ASFAIKでは、javax.enterprise.event.Eventインターフェイスを挿入し、呼び出されたオブザーバを宣言しているfireメソッドにインスタンスを渡します。あなたのケースのように継承が関与している場合は、ダミーイベントを発生させるとObserverが呼び出されます。さらにイベントを指定する場合は、修飾子を使用します。
@Inject @Any Event<DummyEvent> dummyEvent;
...
dummyEvent.fire(list.get(i));
/*編集*/
"問題は、" 次のコード行ですとすぐにイベントの種類(MyEvent.class)をspecifiyとして
weld.event().select(MyEvent.class).fire(evt);
、実際のイベントインスタンスのタイプ(evt)はそれ以上重要ではありません。 クラスヒイラージを修飾子で拡張する可能性があります。あなたはitarateどこあなただけのリストを、あなたの例のように、基底クラスにアクセスしているとき、あなたは正確に指定することができ、最後に
public void observerChild(@Observes @ChildEvent.Child BaseEvent child){
System.out.println("child with annotation event");
}
、:例えば:その後
@ChildEvent.Child
public class ChildEvent extends BaseEvent{
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface Child{
}
public void eventAction() {
System.out.println("child");
}
}
はさらにオブザーバーを指定しますそのようなイベントを発射する前に、タイプ/修飾子:
for (BaseEvent e : list){
childEvent.select(e.getClass().getAnnotations()[0]).fire(e);
}
前述したように、あなたは(下図参照)、一般的なオブザーバーを持っている場合、それはイベントごとに呼び出されます。
public void observerBase(@Observes BaseEvent base){
System.out.println("base event");
}
どのCDI実装を使用していますか? –
weld in jboss 7 –