Java闭包问题探究

本文探讨了Java中的闭包概念,通过接口+内部类或Lambda表达式实现。闭包在Java中用于传递函数行为、简化访问流程、形成封闭作用域和模拟多继承。然而,使用闭包时应注意,一旦初始化,内部对外部属性的引用保持不变,即使外部属性已更新。这可能导致意外的行为。理解这一特性对于有效利用Java闭包至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浪费时间是一桩大罪过。——卢梭

闭包的概念

闭包(Closure)是一种能被调用的对象,它保存了创建它的作用域的信息。 JAVA并不能显式地支持闭包,但是在JAVA中,闭包可以通过“接口+内部类”来实现。java8中出现了lamada表达式的方式来实现闭包。

Java闭包的作用
  • 传递函数行为;
  • 简化访问流程,方便属性访问;
  • 形成封闭的执行作用域;
  • 可以实现java的伪多继承;
Java闭包的使用问题

java闭包在初始化时一般都是使用匿名的方式创建。
类似如下代码:

setOnClickListener(new OnClickListener(){
	...
})

onClickListener作为一个闭包可以访问外部的属性,但是需要注意的是,当这个内部类创建之后,下次,在不改变listener的前提下,这个onClickLister不变,其内部的关联外部的属性是不会改变的,因为它内部的关联属性在初始化的时候已经确定了。类似final的特性。下次再次点击某一个按钮触发事件的时候。其内部的属性依然保持的是初始化时的值。

String a;
setOnClickListener(new OnClickListener(){
	func(a)//这里是访问了外部的属性a,但是当改变了外部属性a的值,这个闭包内部的a的值依然是保持的初始化的值。
	...
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值