浪费时间是一桩大罪过。——卢梭
闭包的概念
闭包(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的值依然是保持的初始化的值。
...
})