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

Java8有效地解决了非最终变量的最终编译时错误

萧阳波
2023-03-14

我试图将java8foreach循环中的布尔变量改为true,这是非final的。但我得到了以下错误:封闭范围中定义的必需局部变量必须是final或实际上是final。

如何解决此错误?

代码:

boolean required = false; 

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

现在,当我试图改变它时:

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

我得到了一个错误:在封闭范围中定义的必需局部变量必须是final或实际上是final。

为什么会出现此错误以及如何解决?

共有1个答案

柴英锐
2023-03-14

不能从lambda表达式的主体更改局部变量。有几种方法可以克服这一点:

>

  • 在这种特殊情况下,您只需设置boolean required=!地图isEmpty() 不带任何lambda表达式。如果要根据某些条件进行设置,可以使用流API:

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

    这种解决方案是最受欢迎的。

    将所需的变量转换为封闭类的字段。

  •  类似资料:
    • 问题内容: 我正在尝试将java8 forEach循环内的布尔变量更改为true,这是非最终的。但是我遇到了以下错误:在封闭范围内定义的必需局部变量必须是final或有效的final。 如何解决这个错误? 代码: 这是我在函数中创建的变量。 现在,当我尝试更改它时: 我收到错误消息:封闭范围中定义的必需局部变量必须是final或有效的final。 为什么会出现此错误,以及如何解决? 问题答案: 您

    • 我正在使用RxVertx,它是一种RxJava和Java8,我有一个编译错误。 这是我的代码: 编译错误是:“在封闭范围内定义的局部变量游戏必须是最终的或有效的最终的” 我无法将“game”定义为final,因为我在函数末尾执行分配\set并返回它。 如何编译此代码? 谢了。

    • 在Java8中,Java设计者提出了一个有效的final变量的概念,即一个如果被“final”追加就不会给编译器带来错误的变量。我的问题是,这个新提出的“有效最终”概念比经典的“最终”提供了什么?作为一名Java开发人员,我实际上得到了什么好处?

    • 如何在Java 8 lambda中使用非final变量。它抛出编译错误,称“封闭范围中定义的局部变量日期必须是final或实际上是final” 我实际上想实现以下目标: 如何实现此目的?它会为 date2 引发 comilation 错误。谢谢

    • 问题内容: 这个问题已经在这里有了答案 : 为什么在匿名类中只能访问最终变量? (15个答案) 为什么实例变量“忽略Lambda表达式中使用的变量必须是最终变量或实际上是最终变量”警告[重复] (2个答案) Lambdas:局部变量不需要最终变量,实例变量不需要 (10个答案) 2年前关闭。 当我编写此代码时,我收到一个编译时错误,该错误是: “ lambda中的变量必须是final或有效的fin

    • 配置选项 要做到最大限度的定制每一个软件包,获取完整的配置选项是必须的。当然,要想更加详细、全面的了解如何自定义安装,还需要查看 README INSTALL FAQ 之类的文档,甚至是软件包的官方手册。需要注意的是,有不少软件包的配置选项分布在多个 configure 脚本中,还有少数并不是通过 configure 脚本进行配置的,查看完整的配置信息就变成一件很吃力的事情了。因此唯一的建议就是:

    • 问题内容: 在Java中,何时应使用静态非最终变量? 例如 显然,这里我们不是在谈论常量。 根据我的经验,我经常在使用单例时对它们进行辩护,但后来我最终需要拥有多个实例,这使我感到非常头痛和重构。 似乎很少在实践中使用它们。你怎么看? 问题答案: 统计信息收集可以使用非最终变量,例如,计算创建的实例数。另一方面,对于这种情况,您可能还是要使用etc,这时可能是最终的。另外,如果您要收集多个统计信息