【问题标题】:Is it important to always pass argument to event Handler in java?在java中总是将参数传递给事件处理程序很重要吗?
【发布时间】:2013-11-13 05:10:16
【问题描述】:

嗯,据我所知,作为参数传递给 Java 中的事件处理函数的事件对象包含有关该事件的附加信息。 因此,这意味着在我们需要之前传递该参数有时可能并不重要。

但是,情况并非如此……因为如果缺少对象参数,它会引发错误。 例如,这会引发错误..

public void actionPerformed() {     //since the event object parameter is missing

        button.setText("Clicked");
    }

为什么会这样? 有时传递参数只是一种浪费,那么为什么 Swing/AWT Java API 中没有方法允许事件处理程序完全不包含参数呢? 那真的会安慰很多。 没有?

【问题讨论】:

  • 它不会“抛出错误”。相反,这是一个编译错误,因为尚未实现特定接口 - 确保 readpost 实际错误指示符(这就是我投反对票的原因)。如果您制作自己的自己的事件/事件处理程序,那么您可以指定所需的任何参数(可能没有);但是如果你使用现有的事件,那么你必须按照他们定义的规则来玩。
  • @user2864740 我们可以创建自己的事件处理程序吗?
  • 当然,如果您创建自己的偶数源(也许是控件?)。见stackoverflow.com/questions/6270132/…
  • @user2864740 这真的很有用! :)

标签: java swing api events event-handling


【解决方案1】:

是的,重要的是,该参数构成了接口所声明的合约的一部分。

interface 描述了对实现的期望。

public interface ActionListener {
    public void actionPerformed(ActionEvent evt);
}

为了让一个类能够调用ActionListener 的任何实现,它不仅必须提供方法的名称,还必须提供它(interface)列出的所有参数。

public void actionPerformed() { 
    button.setText("Clicked");
}

不符合ActionListener的合同要求,因此无法调用。事实上,假设您对 implements ActionListener 进行了分类,除非您提供表单方法签名 (public void actionPerformed(ActionEvent evt)) 的实现,否则它不会编译。

如果您不想使用evt 对象,请忽略它。

【讨论】:

  • 为什么没有指定不带参数的事件处理程序的合约?
  • 您必须询问 API 的设计者。我想他们从来没有见过你不需要事件对象的情况。
猜你喜欢
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 2021-05-30
相关资源
最近更新 更多