2017-05-03 2 views
1

J'ai deux écouteurs qui accepteront le même argument lors de la publication d'événements dans eventbus. Mais même s'ils acceptent le même argument, ces écouteurs se comportent différemment.Comment gérer plusieurs écouteurs avec le même argument dans 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()); 

bouton APPUYER utilisateur et veut déclencher EventListener1 comme sage pour annuler le travail.

pour exécuter emploi

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

pour annuler le travail

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

Ma question est que comment puis-je déclencher écoute spécifique lors de l'affichage des événements dans EventBus ou il appellera les auditeurs?

+0

Ne peut pas vous utiliser des sous-classes spécifiques comme 'ExecuteJob de classe étend JobVO 'etc? –

+0

@RC. ne pouvons-nous pas utiliser JobVO comme client server communication.in web niveau nous créons jobVO à partir des entrées des utilisateurs et passons dans server.je sais que cela peut être facile si utilisation sub classes.je veux juste savoir s'il y a une autre façon de le faire au lieu de en utilisant des sous-classes. Merci. – gihan

+1

un écouteur d'événement et un commutateur fonctionnera –

Répondre

2

Quelques solutions simples:

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

... ou, alternativement, n'utilisent pas EventBus:

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