我想在 CDI 中触发一个事件,我只能在运行时确定其类型。例如,假设有一些A
实现类的接口AA
和AB
. 我有两个观察者:
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());
}
这不起作用,因为A
既不是AA
or的子类型AB
(反之亦然)。我注意到有一种select
采用子类型的方法:
public <U extends T> Event<U> select(Class<U> subtype, Annotation... qualifiers);
但是,它需要一个正确参数化的Class
对象,它(如果我错了,那就更正),我不能在运行时构建。
有什么解决方案还是我必须使用限定符(可能是带有Class<?>
方法的注释)?