Java Lambda表达式与方法引用详解
1. Lambda表达式与变量捕获
在Java中,Lambda表达式可以访问其封闭作用域中定义的变量。例如,Lambda表达式可以使用其封闭类定义的实例变量或静态变量,也可以访问 this (显式或隐式),这指的是Lambda表达式封闭类的调用实例。因此,Lambda表达式可以获取或设置实例变量或静态变量的值,并调用其封闭类定义的方法。
然而,当Lambda表达式使用其封闭作用域中的局部变量时,会出现一种特殊情况,称为变量捕获。在这种情况下,Lambda表达式只能使用实际上是最终的局部变量。实际上是最终的变量是指在首次赋值后其值不会改变的变量。不需要显式地将此类变量声明为 final ,尽管这样做也不会出错。(封闭作用域的 this 参数自动实际上是最终的,并且Lambda表达式没有自己的 this )。
需要注意的是,Lambda表达式不能修改封闭作用域的局部变量。这样做会使其失去实际上是最终的状态,从而导致捕获非法。
以下是一个示例程序,展示了实际上是最终的局部变量和可变局部变量之间的区别:
// An example of capturing a local variable from the enclosing scope.
interface MyFunc {
int func(int n);
}
class VarCapture {
public static void main(String
超级会员免费看
订阅专栏 解锁全文
1023

被折叠的 条评论
为什么被折叠?



