lambda变量作用域
访问外围变量
lambda表达式可以捕获外围作用域中变量的值。
var str1 = "hello";
var str2 = "java";
testConsumer(str1, str->
System.out.println(str + " " + str2)
);
但在lambda表示式中,不能修改外围变量的值。下面的做法是不合法的:
var str1 = "hello";
var str2 = "java";
testConsumer(str1, str->
{
str2 = " " + str2; // error
System.out.println(str + str2);
}
);
如果 lambda表达式中引用一个变量,而这个变量可能在外部改变,这也是不合法的。下面就是不合法的:
for (int i=0; i < strs.length; i ++)
{
testConsumer(strs[i], str->System.out.println(i + str)); //error
}
结合上述三个例子,我们可以总结出:lambda表达式中捕获的变量必须实际上是实时最终变量。
this
在lambda表达式中的this,是指创建这个lambda表达式方法的this参数。