0

可能重复:
Java 中如何使用匿名(内部)类?

我刚刚在阅读 Java Puzzlers 时发现了以下功能

public class Main {
    public static void main(String[] args) {
        new Object() {
            void helloWorld() {
                System.out.println("Hello world!");
            }
        }.helloWorld();
    }
}

我发现这非常方便。非常像封闭。问题是我找不到有关此构造的任何信息。谁能给我一个描述这个功能的链接?

4

3 回答 3

3

这是一个匿名内部类的例子。从 Java 1.1 开始支持它。

这可能看起来像闭包,但实际上有一些限制1使它不如真正的闭包。然而,尽管有这些限制,匿名内部类仍然非常有用……并广泛用于 Swing 和需要轻量级回调的类似框架。

参考:


1 - 匿名内部类(或命名内部类)不像真正的闭包的原因是它不允许在封闭范围内引用可变局部变量。您可以引用实例变量或final局部变量,但命名非final局部变量(或方法参数变量)是编译错误。

于 2012-12-29T00:57:15.377 回答
2
new Object() {
    void helloWorld() {
        System.out.println("Hello world!");
    }
}.helloWorld();

这意味着,创建一个扩展 Object 的匿名类的实例,然后在其上调用 .helloWorld() 方法。

于 2012-12-29T00:56:34.367 回答
0

Java 规范 15.9.5。匿名类声明和 15.9.5.1。匿名构造函数 http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9.5

于 2012-12-29T01:00:18.960 回答