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

时间:2016-04-05 10:19:49

标签: java vaadin

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

例如,来自Vaadin的Javadoc Button.ClickListener

object(Payone_Core_Model_Config_Payment)#<a number> (1) {
  ["methods":protected]=>
  array(6) {
    [<a number>]=>
    object(Payone_Core_Model_Config_Payment_Method)#<a number> (38) {
      ["id":protected]=>
      string(1) "a number"
      ["scope":protected]=>
      string(6) "stores"
      ["scope_id":protected]=>
      string(1) "<a number>"
      ["code":protected]=>
      string(15) "advance_payment"
      ["name":protected]=>
      string(8) "Vorkasse"
      ["sort_order":protected]=>
      string(1) "<a number>"
      ["enabled":protected]=>
      string(1) "<a number>"
      ["fee_config":protected]=>
      NULL
      ["mode":protected]=>
      string(4) "test"
      ["use_global":protected]=>
      string(1) "1"
      ["mid":protected]=>
      string(5) "<a number>"
      ["portalid":protected]=>
      string(7) "<a number>"
      ["aid":protected]=>
      string(5) "<a number>"
      ["key":protected]=>
      string(16) "<a key>"
      ["allowspecific":protected]=>
      string(1) "0"
      ["specificcountry":protected]=>
      array(0) {
      }
      ["allowedCountries":protected]=>
      array(2) {
        [0]=>
        string(2) "DE"
        [1]=>
        string(2) "AT"
      }
      ["request_type":protected]=>
      string(16) "preauthorization"
      ["invoice_transmit":protected]=>
      string(1) "0"
      ["types":protected]=>
      NULL
      ["klarna_config":protected]=>
      NULL
      ["klarna_campaign_code":protected]=>
      NULL
      ["paypal_express_image":protected]=>
      NULL
      ["check_cvc":protected]=>
      NULL
      ["check_bankaccount":protected]=>
      NULL
      ["bankaccountcheck_type":protected]=>
      NULL
      ["message_response_blocked":protected]=>
      NULL
      ["sepa_country":protected]=>
      NULL
      ["sepa_de_show_bank_data":protected]=>
      NULL
      ["sepa_mandate_enabled":protected]=>
      NULL
      ["sepa_mandate_download_enabled":protected]=>
      NULL
      ["customer_form_data_save":protected]=>
      NULL
      ["is_deleted":protected]=>
      string(1) "0"
      ["minValidityPeriod":protected]=>
      string(0) ""
      ["minOrderTotal":protected]=>
      string(1) "1"
      ["maxOrderTotal":protected]=>
      string(4) "1000"
      ["parent":protected]=>
      string(1) "<a number>"
      ["currency_convert":protected]=>
      string(1) "0"
    }

1 个答案:

答案 0 :(得分:2)

Method实例用于事件通知。将其定义为常量会导致其他地方的代码更易读,并且还可能具有(次要)性能优势。

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

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

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