在Vaadin中,为什么,在ClickListener接口中,接口方法反映为公共静态方法对象



为什么接口方法被反映为公共静态方法对象?

例如,来自Vaadin按钮的Javadoc。ClickListener:

public interface ClickListener extends Serializable {
        public static final Method BUTTON_CLICK_METHOD = ReflectTools
                .findMethod(ClickListener.class, "buttonClick",
                        ClickEvent.class);
        public void buttonClick(ClickEvent event);
}

Method实例用于事件通知。将它定义为常量可以在其他地方获得更可读的代码,而且它可能还具有(较小的)性能优势。

它用于注册ClickListener(或其他侦听器),例如参见Button.addClickListener:

public void addClickListener(ClickListener listener) {
    addListener(ClickEvent.class, listener,
            ClickListener.BUTTON_CLICK_METHOD);
}

之所以使用它,是因为Vaadin对组件中的所有事件使用单个EventRouter,并且调度基于事件类型(或事件超/子类型),Method用于查找使用反射调用的正确方法。

最新更新