Java中的闭包之实例一

Java中的闭包之实例一

https://blog.csdn.net/renaissance_joker/article/details/70217167

闭包(Closure)是一种能被调用对象,它保存了创建它的作用域的信息。 
Java并不能显式地支持闭包,但对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以直接调用外部类的private成员,因此可以把非静态内部类当成面向对象领域的闭包。 
通过这种仿闭包的非静态内部类,可以很方便地实现回调功能,回调就是某个方法一旦获得了内部类对象的引用后,就可以在合适时候反过来调用外部类的方法。所谓回调,就是允许客户类通过内部类引用来调用其外部类的方法,这是一种非常灵活的功能。 
  假设有下面的Teachable接口和Programmer基类,它们都提供了一个work方法,这两个方法的方法签名完全相同,但方法功能可能不一样。首先定义一个Teachable接口(也就是教学接口): 
这里写图片描述 
然后定义一个Programmer类(也就是程序猿类): 
这里写图片描述 
  假设现在有一个人,既是一个程序员,也是一个教师。也就是说需要定义一个特殊的类,既需要实现Teachable接口,也需要继承Programmer父类。表面上看起来这没有任何问题,问题是Teachable接口和Programmer父类里包含了相同的work方法,如果采用如下代码来定义一个特殊的TeachableProgrammer类: 
这里写图片描述 
  显然上面的TeachableProgrammer类只有一个work方法,这个work方法只能进行“教学”,不再可以进行“编程”。但实际需要TeachableProgrammer类里既包含“教学”的work方法,也包含“编程”的work方法。 
  这个时候,可以通过一个仿闭包的内部类来实现这个功能: 
这里写图片描述 
这样就实现了即实现了work的讲解也实现了work的编程2个人的功能。 
Main函数如下: 
这里写图片描述

 

posted @ 2018-08-03 17:37  wjj1013  阅读(281)  评论(0编辑  收藏  举报