gpt4 book ai didi

java - 匿名类如何访问父类的参数?

转载 作者:行者123 更新时间:2023-12-01 14:09:32 25 4
gpt4 key购买 nike

鉴于此 SSCE:

public class AnonymousClassTest {

String param = "initial";

void test() {
Runnable runnalbe = new Runnable() {
@Override
public void run() {
System.out.println(param);
}
};
runnalbe.run();

param = "after";

runnalbe.run();
}

public static void main(String[] args) {
new AnonymousClassTest().test();
}

}

谁能指出 JLS 或任何其他文档中的一部分来解释结果的原因

initial
after

而不是因为缺少 paramfinal 而不是编译,或者只是打印:

initial
initial

我记得以这种方式将参数传递给匿名类时需要 final,但在 Java 7 中似乎并非如此。有什么变化?

最佳答案

一切都没有改变。内部类始终可以访问外部类的字段。仅当从内部类访问局部变量 时才需要 final。

不过,在 Java 8 中,即使是局部变量也不需要声明为 final。它们必须是有效最终的,即编译器足够聪明,可以检查它们是否从未被重新分配。

打印的内容是完全正常的,因为内部类只是简单地引用了外部类实例,并以与外部类方法相同的方式访问其字段。

关于java - 匿名类如何访问父类的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478180/

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