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里都可以
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过
2021-04-03 Tesseract5.0 图像识别本地服务 一 【安装配置】
2021-04-03 AutoIt3 示例代码
2014-04-03 Spring+Quartz实现文件中转站