为什么接口方法反映为公共静态方法对象?
例如,从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
用于查找正确的使用反射调用的方法。