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