(Oracle 教程中的拼写错误?)从 lambda 表达式访问封闭范围的局部变量

(Typos in Oracle tutorial?) Accessing local variables of the enclosing scope from a lambda expression

是的,关于这个话题有很多类似的问题, 但我想说明下官方教程要不要修改

在 Oracle Java 教程中 https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

在副标题“访问封闭范围的局部变量”下方,

它说:

Because of this assignment statement, the variable FirstLevel.x is not effectively final anymore. As a result, the Java compiler generates an error message similar to "local variables referenced from a lambda expression must be final or effectively final" where the lambda expression myConsumer tries to access the FirstLevel.x variable:

System.out.println("x = " + x);

上面这段话,这个FirstLevel.x不需要更正吗?

我认为需要修改为parameter x of methodInFirstLevel,而不是FirstLevel.x

因为 lambda 表达式没有引入新级别的作用域,但是普通方法(methodInFirstLevel 在这种情况下)确实产生了新级别的作用域。

我是不是听错了?

(我已尝试在标题中正确描述此问题 & body,但请让我知道是否应修改此问题。)

你是对的。我会这样表述:

the parameter variable x is not effectively final anymore.