[英]Can someone explain this Java syntax to me?
有人可以向我解释这种Java语法吗? 括号内的括号在做什么?
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
这称为匿名内部类 。 它创建一个扩展WindowAdapter
的未命名类(也可以指定一个接口,在这种情况下,该类将实现该接口),并创建该类的一个实例。 在方括号内,您必须实现所有抽象方法或所有接口方法,并且您也可以覆盖方法。
为了补充andersoj的答案,通常在方法需要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程序员通常会更喜欢匿名类方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.