【问题标题】:How to handle multiple listeners with same argument in google guava eventbus如何在google guava eventbus中处理具有相同参数的多个侦听器
【发布时间】:2017-05-03 17:03:56
【问题描述】:

我有两个侦听器在将事件发布到 eventbus 时接受相同的参数。但即使接受相同的参数,这些侦听器的行为也会不同。

public class EventListener1 {



    @Subscribe
    public void executeJob(jobVO jobVO ) {
        //logic goes here
    }
}



public class EventListener2 {



    @Subscribe
    public void cancelJob(jobVO jobVO ) {
        //logic goes here but different
    }
}

EventBus eventBus = new EventBus();
eventBus.register(new EventListener1());
eventBus.register(new EventListener2());

用户按下执行按钮并想要触发EventListener1 就像取消作业一样明智。

用于执行作业

JobVO j=new JobVO();
j.setAction("executeJob");
etc... 
eventBus.post(j);

取消作业

JobVO j=new JobVO();
j.setAction("cancelJob");
etc... 
eventBus.post(j);

我的问题是如何在将事件发布到 eventbus 时触发特定的侦听器,否则它会同时调用两个侦听器?

【问题讨论】:

  • 你不能使用一些特定的子类,比如class ExecuteJob extends JobVO 等吗?
  • @RC。我们不能使用 JobVO 作为客户端服务器通信吗?在 Web 层中,我们从用户输入创建 jobVO 并传递到服务器。我知道如果使用子类这很容易。我只想知道有没有其他方法可以代替使用子类。谢谢。
  • 一个事件监听器和一个开关将起作用

标签: java guava event-bus


【解决方案1】:

一些简单的解决方案:

@Subscribe
public void executeJob(jobVO jobVO ) {
    if (!jobVO.getAction().equals("executeJob")) {
       return;
    }
    //logic goes here
}

...或者,或者,不要使用 EventBus

JobVO j=new JobVO();
j.setAction("executeJob");
etc... 
eventListenerForExecuting.executeJob(j);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2021-08-26
    相关资源
    最近更新 更多