我正在尝试在java8 forEach循环中更改非final的布尔变量为true。但是我得到了以下错误:要求在封闭范围内定义的局部变量必须是final或有效final。
如何解决这个错误?
代码:
boolean required = false;
这是我在函数中创建的变量。
现在当我试图更改它时:
map.forEach((key, value) -> {
System.out.println("Key : " + key + " Value : " + value);
required = true;
});
我遇到了这个错误:本地变量必须是 final 或 effectively final,定义在封闭作用域中。
为什么会出现这个错误,如何解决?
boolean[] required
的情况下,您不会更改局部变量,而是更改堆对象。 - Tagir ValeevAtomicBoolean
,可以通过set(boolean)
方法改变其值。 - dkatzelBoolean
对象是不起作用的,因为你不能改变该对象的值,也不能创建一个new Boolean()
,因为引用必须是(有效地)最终的。 - dkatzel