私は大規模なプログラムでこの問題に遭遇したので、小さなサンプルを書いてテストしました。誰かが私にこれを説明してくれることを願っています。
コードは次のとおりです。
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());
私の論理では、これへの出力は単一の「テスト」である必要があります。実際、これは 2 つの「テスト」であり、ハンドラは 2 回呼び出されます。これがなぜなのか、私にはよくわかりません。c1 は単一のオブジェクトなので、ハンドラーは一度だけ呼び出されるべきではありませんか?