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
方法,编译器会阻止我这样做。
答案 0 :(得分:4)
JLS § 15.8.4说" TypeName.this
形式的表达式的值是 n '词汇封闭的this
实例&#34 ;.由于您的示例中没有Main的封闭实例,因此代码无效。
在javac中,代码产生错误"非静态变量this
无法从静态上下文引用"。它在Eclipse中编译的事实似乎是Eclipse中一个模糊的错误(它有自己的编译器)。