我正在尝试运行此代码:
class A {
int x = 123;
public void f(int x) {
new Runnable() {
public void run() {
System.out.println(x);
}
}.run();
}
static {
A a = new A();
a.f(33);
}
}
但这给了我一个错误:
$ javac A.java && java A
A.java:6: local variable x is accessed from within inner class; needs to be declared final
System.out.println(x);
^
1 error
x
参数 is not ,因此final
不应从匿名类访问它,但代码无法编译。看起来该println
行正在尝试使用x
参数而不是x
字段。为什么?我怎么能告诉它我想要这个x
领域?