java(Oracle教程中的打字错误?)从lambda表达式访问封闭范围的局部变量
是的,在这个话题上有很多类似的问题, 但我想澄清一下,官方教程是否应该修改
在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
在本例中)确实产生了新级别的作用域
我弄错了吗
(我已尝试在标题和正文中正确描述此问题,但请告知是否应修改此问题。)
# 1 楼答案
你说得对。我可以这样说: