Java内联接口实现,变量和方法调用

时间:2015-01-15 21:34:14

标签: java java-8

在Java中,我为什么要这样做

new java.awt.event.WindowAdapter() {
    public void windowClosing(java.awt.event.WindowEvent evt) {
        screenClosed();
    }
}

// ...

public void screenClosed() {
    running = false;
}

但不是

new java.awt.event.WindowAdapter() {
    public void windowClosing(java.awt.event.WindowEvent evt) {
        running = false;
    }
}

1 个答案:

答案 0 :(得分:1)

我猜测running是一个局部变量,而不是你第二个例子中的一个字段,你必须使用screenClosed方法使其成为一个字段才能使它工作吗?从您的代码示例中很难说清楚。

如果是这样:内部类(如本地或匿名类)要求(本地)变量标记为final(它们是常量)。这是因为编译器通过将变量作为参数传递给编译器创建的构造函数来构造类,然后将其作为字段存储在编译器生成的类中。

您可以通过将局部变量声明为:

来解决此限制
final boolean[] running = new boolean[]{true};

然后设置running[0] = false