我现在有点迷茫。我有一个按钮让我们调用它 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/