lamdba 变量 final
时间: 2023-09-09 13:12:34 浏览: 84
在 Lambda 表达式中,如果你想要访问一个局部变量,那么这个变量必须是 final 或者是 effectively final。这是因为 Lambda 表达式本身没有自己的作用域,它只能访问外部作用域中的 final 变量,或者是能够被视为 final 的变量。
例如,下面的代码就是合法的:
```java
int x = 10; // x 虽然没有声明为 final,但是被视为 effectively final
Consumer<Integer> consumer = (i) -> System.out.println(i + x);
```
但是,如果你试图修改 x 的值,那么代码就会编译错误:
```java
int x = 10;
Consumer<Integer> consumer = (i) -> {
x = x + i; // 编译错误,x 不是 final 或 effectively final 变量
System.out.println(x);
};
```
因此,如果你想在 Lambda 表达式中访问一个局部变量,并且这个变量的值需要在 Lambda 表达式内部修改,那么你可以考虑将它定义为一个实例变量或者是类变量。
阅读全文