Java addDomHandler和implements handler之间的区别

Java addDomHandler和implements handler之间的区别,java,gwt,event-handling,Java,Gwt,Event Handling,我正在创建一个复合面板,可以从系统中拖放文件。 看起来像贝娄 public abstract class Upload extends Composite implements DragEnterHandler, DragLeaveHandler, DropHandler, DragOverHandler { ... @Override public void onDragOver(DragOverEvent event) { // TODO Auto-gene

我正在创建一个复合面板,可以从系统中拖放文件。 看起来像贝娄

public abstract class Upload extends Composite implements DragEnterHandler, DragLeaveHandler, DropHandler, DragOverHandler {
...

    @Override
    public void onDragOver(DragOverEvent event) {
        // TODO Auto-generated method stub
    }
而且根本不起作用。但是“几乎”相同的代码

    initWidget(uiBinder.createAndBindUi(this));
    ...
    addDomHandler(new DragOverHandler() {
        @Override
        public void onDragOver(DragOverEvent event) {
            // TODO Auto-generated method stub
        }
    }, DragOverEvent.getType());
效果很好

问题:

区别在哪里?我读到应该没有区别。
还有可能以“接口实现”的方式使用它吗?

仅仅因为您实现了接口,并不意味着您的实现被使用

让我举个例子:

public class FancyButton extends Button implements SomeFancyButtonListener
{
    public FancyButton()
    {
        // This line is necessary, otherwise the implemented code isn't used.
        this.addFancyButtonListener(this);
    }

    @Override
    public void fancyButtonClicked(FancyClickEvent e)
    {
        // Do something
    }
}
相当于:

public class FancyButton extends Button
{
    public FancyButton()
    {
        this.addFancyButtonListener(new SomeFancyButtonListener()
        {
            @Override
            public void fancyButtonClicked(FancyClickEvent e)
            {
                // Do something
            }
        });
    }
}
从我在您的第一个代码片段中看到的情况来看,您没有将
this
添加为
处理程序

除非在组件上添加简单的处理程序,否则处理程序直到

在第一种情况下,您已经重写了处理程序的方法,但尚未将此处理程序添加到组件本身,但在第二种情况下,您已将其添加到组件及其实现中,这就是其工作的原因


处理程序就像侦听器,其工作方式与观察者模式的工作方式相同

如果组件想要侦听特定事件,则必须为其注册。无论何时在系统中触发该事件,都将通知所有已注册的组件