Javascript 在Java/Swing中,为什么要使用类作为动作侦听器?

Javascript 在Java/Swing中,为什么要使用类作为动作侦听器?,javascript,java,swing,Javascript,Java,Swing,这个问题是出于我自己的好奇心 在javaScript中,我们使用addEventListener将方法分配给事件回调,在Java中,我们使用addActionListener,但我们使用的整个类中只有一个方法。为什么要将类与单个方法一起使用,而不是使用简单的回调函数?这基本上就是现在的情况,因为我们的回调类只需要一个方法。基本上是因为Java直到最近的版本才有第一类函数。因此,这是传递不同行为的唯一方法。在Java8中,可以使用lambda表达式 button.addActionListener

这个问题是出于我自己的好奇心


在javaScript中,我们使用addEventListener将方法分配给事件回调,在Java中,我们使用addActionListener,但我们使用的整个类中只有一个方法。为什么要将类与单个方法一起使用,而不是使用简单的回调函数?这基本上就是现在的情况,因为我们的回调类只需要一个方法。

基本上是因为Java直到最近的版本才有第一类函数。因此,这是传递不同行为的唯一方法。

在Java8中,可以使用lambda表达式

button.addActionListener(e -> System.out.println("Clicked"));

为什么要将类与单个方法一起使用,而不是使用简单的回调函数

简单地说,因为情况并非总是如此

从概念上讲,想法是一样的,它基于,但不是提供一个函数指针,而是提供一个类引用,但是因为类可以有多个方法,所以需要一种方法让事件生成器知道它应该调用哪个方法

有些事件侦听器很简单,如
ActionListener
,它们只有一个方法,但有些更复杂,如
AncestorListener
MouseListener
WindowListener
,它们可以响应多个不同的事件

关键是,事件侦听器接口定义了调用方希望接收方遵守的预期约定<代码>接口是Java语言的一个关键方面,如何使用它们是一个非常重要的概念


您可以使用内部类或匿名类来简化操作,最近您还可以使用lambda表达式,但本质上,它们仍在生成类引用,这只是使编写Java方法变得更容易

否则您将如何传递Java方法?Java和JavaScript是完全不同的语言。a)类非常便宜,老实说。b) 因为Java直到最近才有其他方法来传递函数(甚至现在它通常只是在运行时生成类)。这也是Java8引入函数作为参数的原因。@Pointy使用了这两种方法,我知道它们是不同的,我只是想问一下它们决定如何处理类似功能的区别。事件侦听器也可能比单个回调方法更复杂,如
MouseListener
WindowListener
button.addActionListner(containingObject::instanceMethodName) ;