Я хочу запустить событие в 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<?>
)?