【问题标题】:change value of variable in forEach loop java 8 [duplicate]在forEach循环java 8中更改变量的值[重复]
【发布时间】:2018-05-11 06:17:03
【问题描述】:
int count =0;
requestUserDto.getNodeIds().forEach(userNodeId->{
    count++; // this statement shows error
     // some another statements here
    }
});

为什么count++ 显示错误

错误:

我在封闭范围内定义的局部变量必须是最终的或有效的最终

【问题讨论】:

  • 好吧,正如错误消息所解释的,您不能在 lambda 表达式中修改局部变量。如果您想提及您正在尝试做的事情,也许我们可以建议一个替代方案。
  • 例如,您可能会使用AtomicInteger
  • 谢谢,但我知道另一种选择。我想知道为什么我们不能在 forEach 中改变值。在正常情况下,每个循环都可以正常工作
  • 你通常可以重新排列你的代码,这样就不需要像这样的变量了。
  • 这是一个示例,不是实际问题。只有我想知道为什么 lambdas 只允许有效的最终变量。

标签: java java-8


【解决方案1】:

考虑到 lambda 本质上是匿名内部类的语法糖,在 lambda 表达式中使用的变量必须是有效的 final。查看此post 了解更多详情。

【讨论】:

  • 这意味着我们可以说这是 lambdas 的限制或缺点,它使用的变量总是有效的 final。
  • 我不认为它是 lambda 的限制,因为它只是替代了无法定义非最终变量的匿名内部类。这种行为在逻辑上是正确的。
  • @ArihantJain,这种行为是由于Java 语言中如何处理闭包。 Jon Skeet 有一个答案here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2018-11-19
  • 1970-01-01
  • 2018-09-17
  • 2018-08-10
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多