Error:(1062, 33) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量
时间: 2023-11-27 22:50:46 浏览: 332
编译器说 Lambda 表达式中的变量必须是 final 的,我偏不信
这个错误是因为你在 lambda 表达式中引用一个本地变量,但是这个本地变量的在 lambda 表达式中被改变了,因此不是最终变量或实际上最终变量。
为解决这个问题,你可以将这个本地变量声明为 final 或 effectively final,这样在 lambda 表达式中就不能修改这个变量的值了。例如:
```java
final int num = 10;
Runnable r = () -> {
// 使用 num
};
```
或者:
```java
int num = 10;
Runnable r = () -> {
// 使用 num
num = 20; // 这里会编译错误,因为 num 不是 effectively final
};
```
如果你需要在 lambda 表达式中修改这个变量的值,你可以使用一个数组或对象来代替这个变量。例如:
```java
int[] num = {10};
Runnable r = () -> {
// 使用 num[0]
num[0] = 20; // 可以修改 num[0] 的值
};
```
阅读全文