gpt4 book ai didi

java - 从匿名类的角度来看,局部变量遮蔽的字段

转载 作者:行者123 更新时间:2023-12-01 07:06:29 25 4
gpt4 key购买 nike

我正在尝试运行此代码:

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参数不是 final ,因此不应从匿名类访问它,但代码无法编译。它看起来像 println行正在尝试使用 x参数而不是 x field 。为什么?我怎样才能告诉它我想要 x领域?

最佳答案

你可以使用

A.this.x

由于匿名 Runnable 类是 A 类的内部类。

阴影的概念决定了

中的 x
System.out.println(x);

指的是本地方法参数变量x,但这不是final,因此您无法在匿名类中访问它,而不是在Java 7及以下版本中至少。在 Java 8 中可以,这可能会令人困惑。

不要在同一编译单元中对变量使用相同的名称。

关于java - 从匿名类的角度来看,局部变量遮蔽的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22703363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com