有人可以向我解释这个 Java 语法吗?外括号内的那些括号在做什么?
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
有人可以向我解释这个 Java 语法吗?外括号内的那些括号在做什么?
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
它被称为匿名内部类。它创建一个未命名的扩展类WindowAdapter
(也可以指定一个接口,在这种情况下,该类将实现该接口),并创建该类的一个实例。在括号内,您必须实现所有抽象方法或所有接口方法,并且您也可以覆盖方法。
为了补充安德索的答案,您通常在方法需要 X 的实例时使用它们,但 X 是抽象类或接口。
在这里,您实际上是从 WindowAdapter 创建派生类,并重写其中一种方法来执行特定任务。
这种语法对于事件处理程序/侦听器非常常见。
它是一个匿名内部类。这只是一个捷径。如果您需要将其创建为顶级类,您可以想象代码会是什么样子:
class CloseApplicationWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
然后,在您的代码中,您将执行以下操作:
CloseApplicationWindowAdapter adapter = new CloseApplicationWindowAdapter();
addWindowListener(adapter);
两种解决方案具有完全相同的效果(例如,尽管匿名类会创建一个Class$1.class
文件)。如果匿名类不会变得太大/复杂/重要,Java 程序员通常会更喜欢匿名类方法。