闭包 java_详解Java中的闭包(Closure)

  • Post author:
  • Post category:java


详解Java中的闭包(Closure)

https://blog.csdn.net/lixiangminghate/article/details/70189210

以前总是对闭包(Closure)一知半解的,最近花时间查阅资料,很多地方都讲得语焉不详,看后仍感觉云里雾里的。后来还是研究了下李刚写的《疯狂Java讲义》,里面讲得还是比较清楚,才终于弄清楚了闭包是怎么回事。现在分享研究结果出来,也算是给像我原来一样有疑惑的学习者一个参考。

闭包(Closure)是一种能被调用对象,它保存了创建它的作用域的信息。

Java并不能显式地支持闭包,但对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以直接调用外部类的private成员,因此可以把非静态内部类当成面向对象领域的闭包。

通过这种仿闭包的非静态内部类,可以很方便地实现回调功能,回调就是某个方法一旦获得了内部类对象的引用后,就可以在合适时候反过来调用外部类的方法。所谓回调,就是允许客户类通过内部类引用来调用其外部类的方法,这是一种非常灵活的功能。

假设有下面的Teachable接口和Programmer基类,它们都提供了一个work方法,这两个方法的方法签名完全相同,但方法功能可能不一样。

interface Teachable

{

void work();

}

public class Programmer

{

private String name;

//Programmer类的两个构造器

public Programme



版权声明:本文为weixin_33940031原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。