【问题标题】:(Typos in Oracle tutorial?) Accessing local variables of the enclosing scope from a lambda expression(Oracle 教程中的拼写错误?)从 lambda 表达式访问封闭范围的局部变量
【发布时间】:2020-10-25 07:37:49
【问题描述】:

是的,关于这个话题有很多类似的问题, 但我想澄清一下官方教程是否应该修改。

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

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

上面写着:

因为这个赋值语句,变量FirstLevel.x 不是 有效地最终了。结果,Java 编译器生成一个 类似于“从 lambda 引用的局部变量”的错误消息 表达式必须是最终的或有效的最终”,其中 lambda 表达式 myConsumer 尝试访问 FirstLevel.x 变量:

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

在上一段中,这个FirstLevel.x不需要更正吗?

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

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

我弄错了吗?

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

【问题讨论】:

  • 您在教程中发现了一个错误。举报!
  • @Stephen,感谢您的评论!我是新手,真的不知道你是不是在开玩笑:) 如果不是在开玩笑,你能告诉我如何举报吗?我用谷歌搜索,但对于编程新手来说,错误报告似乎相当困难。
  • 不,我不是在开玩笑。但提交 Java 错误报告也不难。只要去这里>> bugreport.java.com/bugreport

标签: java lambda scope


【解决方案1】:

你是对的。我将其表述为:

参数变量x不再是有效的最终变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 2012-04-28
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多