gpt4 book ai didi

java - 订阅同一个类的不同事件总线

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:58 24 4
gpt4 key购买 nike

我正在使用 GreenRobot Event Bus 3.0 作为事件总线,并且我有 2 个发布者:

 private static final EventBus EVENT_BUS = new EventBus();

//Publish event to the event bus
public static void sendEvent(LoggingEvent event){
LogPublisher.EVENT_BUS.post(event);
}

//Publish event to the event bus
public static void sendEvent(OtherLoggingEvent event){
LogPublisher.EVENT_BUS.post(event);
}

我有 2 个订阅者:

 @Subscribe(threadMode = ThreadMode.ASYNC)
public void onEvent(LoggingEvent event){
logEvent( event);
}

@Subscribe(threadMode = ThreadMode.ASYNC)
public void onEvent(OtherLoggingEvent event){
logEvent( event);
}

问题是什么时候打电话:

MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));

两个订阅者都被调用了,我不明白为什么。我认为这可能与 OtherLoggingEventLoggingEvent 的子类这一事实有关,但我不确定。那么我的问题就变成了如何与发布者和订阅者保持 1-1 的关系。我想调用:

MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));

并让订阅者 public void onEvent(OtherLoggingEvent event) 调用,当我调用时:

MyPublisher.sendEvent(new LoggingEvent(varD, varE, varF));

订阅者:

 public void onEvent(LoggingEvent event)

会被调用吗?这会按原样工作,但必须确保类是唯一的,而不是彼此的子类吗?我必须创建一个新的 EventBus 对象吗?

最佳答案

由于事件类继承,两个订阅者都调用。但是您可以在 EventBus 本身中关闭此 eventInheritance 功能。通过使用此方法:

EventBus BUS = EventBus.builder().eventInheritance(false).installDefaultEventBus();

关于java - 订阅同一个类的不同事件总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43270260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com