(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.
是的,关于这个话题有很多类似的问题, 但我想说明下官方教程要不要修改
在 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 theFirstLevel.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.