我想在第一次收到事件时删除GWT事件处理程序。我还想避免跟踪不必要的注册对象而污染我的类(class)。我目前将其编码为:

最终的HandlerRegistration [] registrationRef = new HandlerRegistration [1];
registrationRef [0] = dialog.addFooHandler(new FooHandler()
{
公共(public)无效onFoo(FooEvent事件)
{
HandlerRegistration removeMe = registrationRef [0];
if(removeMe!= null)
{
removeMe.removeHandler();
}

//在这里做东西
}
});

但是使用registrationRef会使代码的可读性降低。有没有一种更好的方法可以在不向类添加变量的情况下做到这一点?

最佳答案

我只是将HandlerRegistration对象作为封闭类的一个字段,这样您就不会被编译器所困扰,并且比对数组和内容进行混洗更“优雅”:

public class TestWidget extends Composite {
    //...

    HandlerRegistration handler;

    public TestWidget() {
        // ...

        handler = button.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                // ...
                handler.removeHandler();
            }
        });
    }

}

10-07 13:30