gpt4 book ai didi

Guava 事件总线 : pause event posting

转载 作者:行者123 更新时间:2023-12-02 02:10:06 26 4
gpt4 key购买 nike

有什么方法可以暂停 EventBus 从 guava 库中发布事件。

我有一个方法 changeSomething() 发布一个事件(例如 SomethingChangedEvent)。现在这个方法被另一个方法 doStuff() 在循环中调用。问题是 SomethingChangedEvent 会在每次调用 changeSomething() 时发布,即使只有最后一次更改很重要。由于事件处理程序执行一些重量级计算,应用程序的性能会快速下降。

在最后一次 changeSomething() 执行后,我想告诉 guava 恢复事件处理。

有没有办法告诉 Guava 忽略除最后一个之外的所有 SomethingChangedEvent

最佳答案

我尝试了这种模式,它是使用子类化从毒丸模式派生出来的:

 public class SomethingChangedEvent {

private final String name;

public SomethingChangedEvent(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}

}

public class IgnoreSomethingChangedEvent extends SomethingChangedEvent {
public IgnoreSomethingChangedEvent(String name) {
super(name);
}

}

public class HandleSomethingChangedEvent extends SomethingChangedEvent {
public HandleSomethingChangedEvent(String name) {
super(name);
}

}

private void eventBusTest() {
EventBus eventBus = new EventBus();
eventBus.register(new EventBusSomethingChanged());
eventBus.post(new SomethingChangedEvent("process this one"));
eventBus.post(new IgnoreSomethingChangedEvent("ignore"));
eventBus.post(new SomethingChangedEvent("don't process this one"));
eventBus.post(new HandleSomethingChangedEvent("handle"));
eventBus.post(new SomethingChangedEvent("process this one bis"));
}

public class EventBusSomethingChanged {
private boolean ignore;

@Subscribe
public void SomethingChanged(SomethingChangedEvent e) {
if (e instanceof IgnoreSomethingChangedEvent) {
ignore = true;
return;
}
if (e instanceof HandleSomethingChangedEvent) {
ignore = false;
return;
}
if (!ignore) {
System.out.println("processing:" + e);
}
}
}

关于 Guava 事件总线 : pause event posting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com