有人可以向我解释这个Java语法吗?

时间:2011-02-27 05:53:09

标签: java anonymous-class

有人可以向我解释这个Java语法吗? 这些括号在外括号内做了什么?

addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

4 个答案:

答案 0 :(得分:6)

它被称为匿名内部类。它创建了一个扩展WindowAdapter的未命名类(它也可以指定一个接口,在这种情况下该类将实现该接口),并创建该类的一个实例。在括号内,您必须实现所有抽象方法或所有接口方法,并且您也可以覆盖方法。

答案 1 :(得分:2)

这是anonymous inner class - 括号表示类声明的开头和结尾。这可能是useful SO questionbunch of others

答案 2 :(得分:2)

为了补充andersoj的答案,通常在方法需要X实例时使用它们,但X是抽象类或接口。

在这里,您实际上是从WindowAdapter创建派生类,并覆盖其中一个方法来执行特定任务。

此语法对于事件处理程序/侦听器非常常见。

答案 3 :(得分:1)

这是一个匿名的内部类。这只是一条捷径。您可以想象如果您需要将代码创建为顶级类,代码将如何显示:

class CloseApplicationWindowAdapter extends WindowAdapter {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

然后,在你的代码中你会做:

CloseApplicationWindowAdapter adapter =  new CloseApplicationWindowAdapter();
addWindowListener(adapter);

两种解决方案都具有完全相同的效果(例如,匿名类会创建Class$1.class文件。如果匿名类没有太大/复杂/重要,Java程序员通常会更喜欢匿名类方法。