Java中的闭包之实例一
来源:互联网 发布:大数据创业 编辑:程序博客网 时间:2024/06/05 15:45
闭包(Closure)是一种能被调用对象,它保存了创建它的作用域的信息。
Java并不能显式地支持闭包,但对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以直接调用外部类的private成员,因此可以把非静态内部类当成面向对象领域的闭包。
通过这种仿闭包的非静态内部类,可以很方便地实现回调功能,回调就是某个方法一旦获得了内部类对象的引用后,就可以在合适时候反过来调用外部类的方法。所谓回调,就是允许客户类通过内部类引用来调用其外部类的方法,这是一种非常灵活的功能。
假设有下面的Teachable接口和Programmer基类,它们都提供了一个work方法,这两个方法的方法签名完全相同,但方法功能可能不一样。首先定义一个Teachable接口(也就是教学接口):
然后定义一个Programmer类(也就是程序猿类):
假设现在有一个人,既是一个程序员,也是一个教师。也就是说需要定义一个特殊的类,既需要实现Teachable接口,也需要继承Programmer父类。表面上看起来这没有任何问题,问题是Teachable接口和Programmer父类里包含了相同的work方法,如果采用如下代码来定义一个特殊的TeachableProgrammer类:
显然上面的TeachableProgrammer类只有一个work方法,这个work方法只能进行“教学”,不再可以进行“编程”。但实际需要TeachableProgrammer类里既包含“教学”的work方法,也包含“编程”的work方法。
这个时候,可以通过一个仿闭包的内部类来实现这个功能:
这样就实现了即实现了work的讲解也实现了work的编程2个人的功能。
Main函数如下:
- Java中的闭包之实例一
- Java 中的闭包之争
- JAVA中的闭包
- java中的闭包
- java中的闭包
- Java学习笔记之Java中的包
- Python中的闭包实例详解
- Python中的闭包实例详解
- Python中的闭包实例详解
- 闭包(Java中的闭包)
- Java之Servlet编程实例一
- JAVA之参数传递实例一
- javascript 中的闭包(一)
- Java接口和包的实现之小汽车实例
- [JAVA修炼之路一]-JAVA ATOMIC 包
- Java闭包之我见
- Groovy探索之闭包 一
- javascript闭包之悟(一)
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- miniui实现jsp主页面打开新页面(不同标签)方法总结
- 52. N-Queens II Hard
- 洛谷 P2604 [ZJOI2010]网络扩容
- 【C语言】逗号表达式
- Java中的闭包之实例一
- linux初级学习之系统虚拟机管理15
- 转载-------fwrite和fread函数的用法小结
- 秦皇岛h5edu1-2期学员swiper简历
- Java设计模式系列详解
- 解决 pycharm 使用 import 出现错误提示 但实际能运行
- vpn arp tcp 隧道 lvs原理 (子网掩码作用和局域网传输)
- 1004 String compare
- Codechef April Challenge 2017