2017-06-09 7 views
1
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人の加入者がいることがわかります。今、post()の時点で、すべての関数が呼び出されますか? 2つの関数receiveStartRequestとprocessingStartedが呼び出されると、それらの関数が呼び出されます。Guava EventBus複数の加入者同じtpe

答えて

2

両方のメソッドが呼び出され、あらかじめ定義された順序で呼び出されません。

これに対処するには、ProcessingStartedProcessingRequestedの2つの追加クラスを作成してください。

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)で必要なときに。

+0

私がそれをしなければ私の質問はどうなるでしょうか?両方の加入者が呼び出されますか? – hatellla

+0

@hatellla実際に私はコメントとして書き始めましたが、途中で答えが良くなると思い、その部分を含めるのを忘れました。私は今私の答えでその質問に答えました。もっと慎重ではないため申し訳ありません:) –

+0

ありがとう@Oliver – hatellla

関連する問題