Guava EventBus 多个订阅者相同的 tpe

Guava EventBus Multiple subscribers same tpe

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;

public class Test {

    public static class Processing { }
    public static class ProcessingResults { }
    public static class ProcessingFinished { }

    public static EventBus bus = new EventBus();

    @Subscribe
    public void receiveStartRequest(Processing evt) {
        System.out.println("Got processing request - starting processing");
    }

    @Subscribe
    public void processingStarted(Processing evt) {
        System.out.println("Processing has started");
    }

    @Subscribe
    public void resultsReceived(ProcessingResults evt) {
        System.out.println("got results");
    }

    @Subscribe
    public void processingComplete(ProcessingFinished evt) {
        System.out.println("Processing has completed");
    }


    public static void main(String[] args) {
        Test t = new Test();
        bus.register(t);
        bus.post(new Processing());
    }
}

因此,在上面的示例中,可以看出有 2 个订阅者接受相同类型的 Processing。现在,在 post() 时,将调用哪些所有函数?如果将调用 receiveStartRequest 和 processingStarted 这两个函数,那么将以什么顺序调用它们?

您的两个方法都将被调用,并且没有预先确定的顺序。

为了解决这个问题,只需创建两个额外的 类:ProcessingStartedProcessingRequested

public class ProcessingStarted {
  private Processing processing;
  // Constructors
  // Getters/Setters
}


public class ProcessingStarted {
  private Processing processing;
  // Constructors
  // Getters/Setters
}

然后在需要时调用 post(new ProcessingRequested(processing))post(new ProcessingStarted(processing)),而不是单独调用 post(processing)