Я хочу запустить событие в 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
, ни AB
(это наоборот).Я заметил, что есть метод select
, который принимает подтип:
public <U extends T> Event<U> select(Class<U> subtype, Annotation... qualifiers);
Однако, он требует правильно параметризованного объекта Class
, который (исправить, если я ошибаюсь), я не могусборка во время выполнения.
Есть ли какое-либо решение или мне придется использовать квалификаторы (возможно, аннотацию с методом Class<?>
)?