我想使用类似的反应堆:
reactor.notify(new CreatedEvent<A>(a));
reactor.notify(new CreatedEvent<B>(b));
我的活动很简单:
public class CreatedEvent<E> extends Event<E> {
public CreatedEvent(E data) {
super(data);
}
}
然后像这样消费这些事件:
reactor.on(new Consumer<CreatedEvent<A>>() {
@Override
public void accept(CreatedEvent<A> t) {
/* do something with a */
}
});
reactor.on(new Consumer<CreatedEvent<B>>() {
@Override
public void accept(CreatedEvent<B> t) {
/* do something with b */
}
});
但是我收到了两个消费者的两个事件。
如果我使用选择器,它可以工作,即:
reactor.notify("created.a", Event.wrap(a));
reactor.on(Selectors.$("created.a"), new Consumer<Event<A>>() {
@Override
public void accept(Event<A> t) {
/* do something with a */
}
});
但是使用选择器我将不得不编写和维护非常多的字符串。
都是关于使用选择器的吗?还是我可以以某种方式“按参数化类类型选择”?