gpt4 book ai didi

Java8 Effectively Final compile time error on non final variable

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:29 26 4
gpt4 key购买 nike

我正在尝试将 java8 forEach 循环中的 boolean 变量更改为非最终的 true。但我收到以下错误:在封闭范围内定义的局部变量必须是最终的或实际上是最终的。

如何解决这个错误?

代码:

boolean required = false; 

这是我在函数中创建的变量。

现在当我试图改变它时:

   map.forEach((key, value) -> {
System.out.println("Key : " + key + " Value : " + value);
required = true;
});

我收到错误:在封闭范围内定义的局部变量必须是最终的或实际上是最终的。

为什么会出现这个错误,如何解决?

最佳答案

您不能更改 lambda 表达式主体中的局部变量。有几种方法可以克服这个问题:

  • 在这种特殊情况下,您可以只设置 boolean required = !map.isEmpty(); 而无需任何 lambda 表达式。如果你想根据某些条件设置它,你可以使用 Stream API:

    boolean required = map.entrySet().stream().anyMatch(entry -> ...);

    这个解决方案是最优选的。

  • 必需的变量转换为封闭类的字段。

  • 最肮脏的方法:声明一个单元素数组:boolean[] required = {false}; 并改为设置此元素:required[0] = true;

关于Java8 Effectively Final compile time error on non final variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32268784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com