访问包含范围内的变量
访问局部变量
修改限制
无法修改:
实例变量的修改
lambda 表达式可以:
示例:从外部作用域捕获局部变量
代码:
interface MyFunc { int func(int n); } class VarCapture { public static void main(String args[]) { // Variável local que pode ser capturada int num = 10; MyFunc myLambda = (n) -> { // Uso correto da variável num int v = num + n; // A instrução abaixo é inválida porque tenta modificar num // num++; return v; }; // Usando a expressão lambda System.out.println(myLambda.func(8)); // Exibe: 18 // Modificar num aqui também causaria erro // num = 9; } }
说明:
数字捕获:
num 实际上是最终的,因为它在初始分配后不会更改。
Lambda 可以访问 num,但不能修改它。
执行:
myLambda.func(8) 返回 18 因为:
num (10) 与参数 n (8) 相加,得到 18。
修改错误:
取消注释 num 或 num = 9 会使捕获无效,从而导致编译错误。
注意:
重要提示:可以在 lambda 表达式中不受限制地使用和修改实例或静态变量。
限制仅适用于外部作用域局部变量。
以上是Lambda 表达式和捕获变量的详细内容。更多信息请关注PHP中文网其他相关文章!