Я хочу удалить обработчик событий GWT в первый раз, когда я получаю событие. Я также не хочу загрязнять свой класс отслеживанием регистрационных объектов, которые не действительно необходимы. Мне в настоящее время кодировали его как:
final HandlerRegistration[] registrationRef = new HandlerRegistration[1]; registrationRef[0] = dialog.addFooHandler(new FooHandler() { public void onFoo(FooEvent event) { HandlerRegistration removeMe = registrationRef[0]; if(removeMe != null) { removeMe.removeHandler(); } // do stuff here } });
но использование registrationRef делает код менее читаемым. Существует ли лучший способ сделать это, не добавляя переменные к моему классу?
Я бы просто сделал объект HandlerRegistration
полем включающего класса, чтобы компилятор не беспокоил вас и это более "элегантно", чем перетасовка массивов и прочего:
public class TestWidget extends Composite {
//...
HandlerRegistration handler;
public TestWidget() {
// ...
handler = button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// ...
handler.removeHandler();
}
});
}
}