実行時にしか判別できないタイプのイベントを CDI で発生させたいと考えています。たとえば、A
実装クラスAA
とAB
. 私は2人のオブザーバーを持っています:
public void observeAA(@Observes AA aa) {
}
public void observeAA(@Observes AB ab) {
}
次に、いくつかのイベント プロデューサー:
@Inject @Any
private Event<A> event;
public A getPayload();
public void fire() {
this.event.fire(getPayload());
}
orA
のサブタイプではないため、これは機能しません(逆です)。サブタイプを取るメソッドがあることに気付きました:AA
AB
select
public <U extends T> Event<U> select(Class<U> subtype, Annotation... qualifiers);
ただし、正しくパラメーター化されたClass
オブジェクトが必要です (間違っていれば正しい)、実行時にビルドできません。
解決策はありますか、または修飾子 (おそらくClass<?>
メソッドの注釈) を使用する必要がありますか?