#java #guava
#java #гуава
Вопрос:
Я пытаюсь использовать guava для подписки на EventBus. Пытаюсь просмотреть документ сайта, но не могу увидеть ни одного примера, где показано, как это сделать.
Кто-нибудь пробовал это раньше??
private final EventBus eventBus = new EventBus();
eventBus.post(eventId); // where eventId is a string.
Это находится в одной из банок. Теперь мне нужно подписаться на эту шину событий и проверить, есть ли какие-либо новые события. Как я могу это сделать?
Любая помощь приветствуется.
Спасибо!!
Ответ №1:
Вам понадобится некоторый объект с аннотированным методом @Subscribe
, который принимает параметр типа String
(поскольку вы отправляете a String
в качестве события для него … обратите внимание, что, вероятно, предпочтительнее какой-то более конкретный тип события). Затем вам нужно передать этот объект в метод EventBus.register(Object). Пример:
public class Foo {
@Subscribe
public void handleEvent(String eventId) {
// do something
}
}
Foo foo = ...
eventBus.register(foo);
eventBus.post(eventId);
Ответ №2:
Вот простая демонстрация.
public class EventBusDemo{
public static void main(String[] args) {
handleTransaction();
}
public static void handleTransaction() {
CatSubscriber catSubscriber = new CatSubscriber();
PandaSubscriber pandaSubscriber = new PandaSubscriber();
DogSubscriber dogSubscriber = new DogSubscriber();
EventBus eventBus = new EventBus();
Animal cat = new Cat();
Animal dog = new Dog();
Animal panda = new Panda();
eventBus.register(pandaSubscriber);
eventBus.register(catSubscriber);
eventBus.register(dogSubscriber);
eventBus.post(cat);
eventBus.post(dog);
eventBus.post(panda);
}
}
животное интерфейса {
void run();
}
класс Cat реализует Animal {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(Cat.class.getSimpleName() " run");
}
}
класс CatSubscriber {
@Subscribe
public void catRun(Animal animal) {
animal.run();
}
}
класс Собака орудия Животного {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(Dog.class.getSimpleName() " run");
}
}
класс DogSubscriber {
@Subscribe
public void dogRun(Animal animal) {
animal.run();
}
}
класс Панда орудия Животного {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(Panda.class.getSimpleName() " run");
}
}
класс pandasubscriberer {
@Subscribe
public void pandaRun(Animal animal) {
animal.run();
}
}
Комментарии:
1. Вам действительно следует добавить некоторое объяснение того, почему это должно работать — вы также можете добавить код, а также комментарии в сам код — в его текущем виде он не содержит никаких объяснений, которые могли бы помочь остальной части сообщества понять, что вы сделали для решения / ответа на вопрос. Это особенно важно для более старого вопроса и вопросов, на которые уже есть ответы.