【发布时间】:2013-07-11 00:16:15
【问题描述】:
我在一个大型程序中遇到了这个问题,所以我写了一个小样本来测试它。我希望有人可以向我解释这一点。
代码如下:
EventBus bus = new SimpleEventBus();
class TestClass {
TestClass() {
bus.addHandler(TestEvent.TYPE, new TestHandler() {
@Override
public void onEvent(TestEvent event) {
System.out.println("test");
}
});
}
}
class TestEvent extends GwtEvent<TestHandler> {
public static final GwtEvent.Type<TestHandler> TYPE = new GwtEvent.Type<TestHandler>();
@Override
public Type<TestHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(TestHandler handler) {
handler.onEvent(this);
}
}
interface TestHandler extends EventHandler {
void onEvent(TestEvent event);
}
之后我执行以下操作:
TestClass c1 = new TestClass();
c1 = new TestClass();
bus.fireEvent(new TestEvent());
现在按照我的逻辑,输出应该是一个单一的“测试”;事实上,它是两个“测试”,处理程序被调用了两次。我真的不明白为什么会这样; c1 是一个单独的对象,所以处理程序不应该只调用一次吗?
【问题讨论】: