Java8在 lambda 表达式中使用局部变量会提示:Local variable flag defined in an enclosing scope must be final or effectively final解决办法

Java8在 lambda 表达式中使用局部变量会提示:Local variable flag defined in an enclosing scope must be final or effectively final

这是因为你使用的局部变量在初始化后,又对这个变量进行了赋值。赋值后会认为这个变量不是final了,所以报错,针对这个问题可以有以下几种解决办法。

法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<String> list = new ArrayList<String>();
list.add("name");
list.add("age");
list.add("address");
  
boolean flag = true;
flag = false;
  
boolean newFlag = flag;
  
list.stream().forEach(e -> {
    if (newFlag) {
        System.out.println(e);
    }
});

 



即将你想要使用的局部变量,在使用前赋值给一个新的变量,这样java8会认为这个新的变量是final,没有变化的,可以使用。

法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
List<String> list = new ArrayList<String>();
list.add("name");
list.add("age");
list.add("address");
  
boolean[] flag = {true};
flag[0] = false;
  
list.stream().forEach(e -> {
    if (flag[0]) {
        System.out.println(e);
    }
});

 



将你需要的值放到一个数组里,也可以使用。

此外放到map或是list里都可以

posted @   锐洋智能  阅读(4230)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过
历史上的今天:
2021-04-03 Tesseract5.0 图像识别本地服务 一 【安装配置】
2021-04-03 AutoIt3 示例代码
2014-04-03 Spring+Quartz实现文件中转站
点击右上角即可分享
微信分享提示