2017-05-03 18 views
1

동일한 인수를 허용하더라도 리스너가 다르게 동작하더라도 eventbus.But에 이벤트를 게시 할 때 동일한 인수를 사용할 수있는 두 개의 리스너가 있습니다.google guava 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("cancelJob"); 
etc... 
eventBus.post(j); 

내 질문을 취소에 대한

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

을 실행하기위한

어떻게 eventbus에 이벤트를 게시 할 때 내가 특정 수신기를 트리거 할 수 있습니다 또는 두 청취자를 호출하는 것입니다?

+0

당신은 일부 특정 서브 클래스를 사용할 수 없습니다 '등? –

+0

@RC. JobVO를 클라이언트 서버 통신으로 사용할 수 없는가? 웹 계층에서 사용자 입력에서 jobVO를 생성하고 server.i로 전달하면 하위 클래스를 사용하는 것이 쉽다는 것을 알고 있습니다 .i는 단지 다른 방법 대신 하위 클래스를 사용합니다. 감사합니다. – gihan

+1

하나의 이벤트 리스너와 스위치가 작동합니다. –

답변

2

간단한 솔루션 :

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

... 또는 교대, 사용하지 않는 EventBus : 클래스 ExecuteJob이 JobVO를 확장`처럼

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