【发布时间】:2014-03-06 01:17:01
【问题描述】:
假设我需要一个特定的应用程序范围的 actionListener。例如:
public class TestAnonymousInnerClass {
private ActionListener closeAction = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
...
}
这段代码编译得很好,但是我可以说我使用了一个匿名内部类来实例化这个closeAction字段吗?
更新: 我正在阅读 SG Ganesh, Tushar Sharma - Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 和 1Z0-805(Java 专家之声)- 2013 年 这本书令人困惑:@ 987654321@ 如下所示,不可能有匿名和“非本地”类。 但是我的课程似乎属于那种,因为它不在方法的上下文中并且仍然是匿名的。
【问题讨论】:
-
我不太明白,你说的我可以说是什么意思?在这种情况下,closeAction 是由抽象内部类实例化的,是的。
-
@Merguez:匿名,不抽象。创建的类是具体的。
-
哎呀,对不起,措辞错误。
-
作者必须定义“本地”/“非本地”的含义。如果在本地他只表示“在方法内部定义”,那么他就错了。
-
您的示例实际上是“本地的”,因为在编译类时,字段初始值设定项表达式成为构造函数的一部分。您可以说本地/非本地区别在于在执行的代码中定义的类和直接定义为另一个类的成员的类(在您的情况下是匿名类的 instance是容器的成员,但类本身不是)。
标签: java inner-classes anonymous-class