Java Hashandler在gwt中是什么意思

Java Hashandler在gwt中是什么意思,java,events,gwt,handler,Java,Events,Gwt,Handler,我无法理解GWT中Has****Handlers接口的含义。如果类实现了hasClickHandler(addClickHandler)和ClickHandler(onClick)接口,那么会有什么区别 谢谢HasClickHandler用于生成单击事件的对象。ClickHandler用于处理事件的对象 例如,按钮将生成单击事件。当您想要处理单击事件时,您可以创建一个包含执行此操作的代码的ClickHandler。将此ClickHandler注册到Button对象,以便在单击发生时,按钮知道该告

我无法理解GWT中
Has****Handlers
接口的含义。如果类实现了
hasClickHandler
addClickHandler
)和
ClickHandler
onClick
)接口,那么会有什么区别


谢谢

HasClickHandler用于生成单击事件的对象。ClickHandler用于处理事件的对象


例如,按钮将生成单击事件。当您想要处理单击事件时,您可以创建一个包含执行此操作的代码的ClickHandler。将此ClickHandler注册到Button对象,以便在单击发生时,按钮知道该告诉谁。HasClickHandlers接口由Button(通过FocusWidget父类)实现,它只是注册ClickHandlers的接口。此界面只是对ClickHandlers的注册进行了标准化。

具有ClickHandlers
——可以单击的东西,例如按钮

ClickHandler
-一些在单击时处理的代码

HasClickHandlers
对象是一个小部件,类似于按钮,当用户单击它时可以做出反应。但是按钮本身并不知道当用户点击它时会发生什么。开发人员可以创建一个
ClickHandler
对象,该对象是一些代码,用于实现当用户单击该按钮时应该发生的事情。可以为按钮提供一个
ClickHandler
,以对用户的单击做出反应,即按钮可以拥有/持有一个ClickHandler-
HasClickHandler


有人可能会问,为什么GWT说应用程序应该定义具有方法签名的视图接口,如:

HasClickHandlers getSaveButton();
而不是简单地

Button getSaveButton();
谷歌主张将视图与演示者分离。演示者通常很少关心按钮的所有功能—它通常只关心按钮是否可以接受单击处理程序并使用它。像
HasClickHandler
这样的界面只有很少的方法,很容易模仿。然而,使用真正的按钮有时需要初始化整个UI框架的部分或部分,并实例化必要的上下文类,以便创建用于测试的按钮

通过让界面返回
HasClickHandler
而不是
按钮
,演示者的单元测试代码可以通过简单地模拟像
HasClickHandler
这样的界面,完全脱离UI框架的复杂性。这意味着更简单的测试框架和非常快速的单元测试(因为您没有初始化UI框架/与UI框架交互的开销)


编辑

OP提问:


好的,例如,如果ABC类实现了HasClickHandler和Clickhandler,然后是onClick和addClickHandler(返回HandlerRegistration),这意味着1)它将通过onClick方法对click事件进行操作,2)将让任何其他类知道(谁在实现Clickhandler并使用ABC类的addClickHandler来注册事件)那次点击刚刚发生?对吧?

ABC
这样的类不会实现
hascackHandlers
。只有像按钮这样的GWT小部件实现了
HasClickHandlers
。Google只是提供了
HasClickHandlers
界面,作为声明对按钮等小部件的变量引用的替代方法。这些小部件将通知registered
ClickHandler
有关按钮单击的信息

您的类
ABC
可能实现
ClickHandler
,或者可能包含从
ClickHandler
派生的内部(可能是匿名)类。典型用法如下所示:

public class ABC {
     ...    
     getSaveButton().addClickHandler(
        new ClickHandler() {
            public void onClick(ClickEvent event) {
               saveToDatabase();
            }
        }
     }
     ...

好的,例如,如果ABC类实现了HasClickHandler和Clickhandler,然后是onClick和addClickHandler(返回HandlerRegistration),这意味着1)它将通过onClick方法对click事件进行操作,2)将让任何其他类知道(谁在实现Clickhandler并使用ABC类的addClickHandler来注册事件)那次点击刚刚发生?正确的?