为什么我能够以静态方法打印此字段?

时间:2014-07-03 23:39:24

标签: java eclipse anonymous-class

public class Main {
    private final int value = 3;

    public static Runnable buildRunner() {
        return new Runnable() {

            @Override
            public void run() {
                System.out.println(Main.this.value);
            }
        };

    }
}

我正在使用带有JRE 7的Eclipse Kepler。

buildRunner方法中 - 为什么我能看到Main的this?什么是'这个' Main的静态方法?为什么这会编译?

如果value是最终的,我只能这样做。我不能调用Main和stuff的实例方法,但值不是decalred static!此外,如果我想在buildRunner方法中使用run方法之外的new Runnable方法,编译器会阻止我这样做。

1 个答案:

答案 0 :(得分:4)

JLS § 15.8.4说" TypeName.this形式的表达式的值是 n '词汇封闭的this实例&#34 ;.由于您的示例中没有Main的封闭实例,因此代码无效。

在javac中,代码产生错误"非静态变量this无法从静态上下文引用"。它在Eclipse中编译的事实似乎是Eclipse中一个模糊的错误(它有自己的编译器)。