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

例如,从Javadoc中的Vaadin Button.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用于查找正确的使用反射调用的方法。

10-08 17:15