java - 使用匿名对象的 actionListener 到底是如何工作的?

标签 java swing object actionlistener anonymous

我现在有点迷茫。我有一个按钮让我们调用它 b1

现在我想添加一个 actionListener,所以通过使用匿名对象我可以做到这一点

      b1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae){
                             ...
                 }
           });

虽然我无法理解 ActionListener 的对象代表什么。 ActionListener 不是接口(interface)吗?所以我们正在创建一个接口(interface)对象?这怎么可能,我们为什么要这样做?

当我尝试这段代码时

  ActionListener al = new ActionListener();

它给我一个错误提示

  Cannot instantiate the type ActionListener

如果我用

   ActionListener al;

这是正确的,但我能用 al 做什么呢?

提前致谢

最佳答案

此语法:

new ActionListener() { ... }

定义了一个实现ActionListener接口(interface)的匿名类。您不是在创建 ActionListener 的实例;您正在创建此匿名类的实例。 (编译器实际上为它分配了一个名称——通常类似于 MyEnclosingClass$1。这个匿名类将有一个单独的 .class 文件。)您可以在 Java tutorial 中阅读更多关于匿名内部类的信息。 .

您可以在函数调用中立即使用这个新对象(就像您的第一个代码片段一样),或者您可以将它分配给一个类型与 ActionListener 赋值兼容的变量。

ActionListener al = new ActionListener() { ... };

关于java - 使用匿名对象的 actionListener 到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360303/

相关文章:

Python 类/实例/对象组织问题

java - 如何告诉 JAXB 在运行时序列化哪些字段?

java - 如何从 WCF 客户端向 Java WebServices 发送多个 cookie

java - 这本Java书有错误吗?或者我错过了什么? (显示模式)

javascript - 引用嵌套的 JavaScript 对象

c# - JSON 复杂类型,可以是对象或对象数组

java - CriteriaBuilder JPA 2.0 Eclipse链接

java - 单独显示日期的日历 api

java - 在 JFrame 上延迟显示

java - 为什么在我将 JComboBox 添加到其中一个 JPanel 中后,所有 JPanel 都没有呈现