42、Java Lambda表达式与方法引用详解

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值