当前位置: 首页 > 知识库问答 >
问题:

(甲骨文教程中的错别字?)从lambda表达式访问封闭范围的局部变量

淳于祺
2023-03-14

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

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

在副标题“访问封闭作用域的局部变量”下,

它说:

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

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

在上面的段落中,这不是<code>第一级吗。x是否需要更正?

我认为它需要修改为方法InFirstLevel的参数x,而不是FirstLevel. x

因为,lambda表达式不会引入新的作用域级别,但普通方法(<code>methodInFirstLevel</code>在本例中)确实会引入新的范围级别。

我弄错了吗?

(我已经尽量在标题中正确描述这个问题了


共有1个答案

狄宾实
2023-03-14
匿名用户

你是对的。我会把它表述为:

参数变量< code>x不再是最终变量。

 类似资料:
  • 我在Java中的TimerTask遇到了一些问题。基本上,我试图做的是为每个会话计算一些东西,我设置一分钟的时间范围,一旦时间到了,我会提示用户输入是否启动另一个会话。以下是我尝试过的: 但是,run()中的toCont变量出现了一些语法错误。错误消息如下:“封闭范围中定义的局部变量toCont必须是final或有效final”。有什么办法可以解决这个问题吗?谢谢

  • 我正在尝试从pojo创建一个函数,该函数在以下意义上使用细节类值的求和: 但是不知道为什么这一行< code > sum = sum . add(detail . getvalue());引发此错误: 从lambda表达式引用的局部变量必须是final或有效final 你能告诉我我做错了什么吗?谢了。

  • 我刚接触oracle forms,遇到了一个问题。我在表单中有两个具有相同字段的多个记录块。 我查询一个块的数据,它被填充。 哪里有一种方法可以将所有行从填充的块复制到“复制”块?

  • 本文向大家介绍Java中如何使用lambda访问封闭类中的变量,包括了Java中如何使用lambda访问封闭类中的变量的使用技巧和注意事项,需要的朋友参考一下 Lambda 表达式的封闭范围定义的变量可以在 lambda 表达式中访问。Lambda 表达式可以访问实例、静态变量和由封闭类定义的方法。它还可以访问“ this”变量(隐式和显式) ,该变量可以是封闭类的实例。Lambda 表达式还设置

  • 问题内容: 我是lambda和Java8的新手。我面临以下错误。 封闭范围中定义的局部变量日志必须是final或有效的final 问题答案: 该消息说,到底是什么问题:你的变量 数 必须是最后的(即:携带关键字决赛),也可以有效地最终(即:你只有一个值分配给它 一旦 拉姆达外)。否则,您将无法在lambda语句中使用该变量。 但是,当然,这与您使用 log 冲突。关键是:您不能在lambda内部写

  • 问题内容: 我收到错误提示,就像在主题中一样,请问如何修复…错误在menuItem循环中,在这里我尝试将textArea前景颜色设置为从menuItem中选择的一种:(colors [mi]) 问题答案: 该错误意味着 您不能在内部类中使用局部变量。 要在内部类中使用变量,必须对其进行声明。只要是循环计数器并且不能分配变量,就必须创建一种变通方法来获取可在内部类内部访问的变量中的值: 因此,您的代