有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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 the FirstLevel.x variable:

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

在上面的段落中,这个FirstLevel.x是否需要更正

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

因为,lambda表达式没有引入新级别的作用域,但是普通方法(methodInFirstLevel在本例中)确实产生了新级别的作用域

我弄错了吗

(我已尝试在标题和正文中正确描述此问题,但请告知是否应修改此问题。)


共 (1) 个答案

  1. # 1 楼答案

    你说得对。我可以这样说:

    the parameter variable x is not effectively final anymore.