2019-02-11——Java 闭包与回调

闭包

闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。

回调

允许客户类通过内部类引用来调用其外部类的方法。

闭包与回调的关系

经常发现闭包与回调会一起讨论,那他们之间有什么关系呢?举个例子来说明:

public class OutClass {
    
    private void readBook(){
        System.out.println("read book");
    }

    public InnerClass getInnerClass(){
        return new InnerClass();
    }

    public class InnerClass{
        public void read(){
            readBook();
        }
    }

}

在该例种InnerClass即是一个闭包,它包含了OutClass的对象;调用InnerClass的read()方法会回调OutClass的readBook()方法。
所以,闭包是实现回调的一种很灵活的方式

闭包和回调的使用

思考一个场景

假设接口A有一个方法m;接口B也有一个同名的方法m,两个方法的签名完全一样但是功能却不一样。类C想要同时实现接口A和接口B中的方法。因为两个接口中的方法签名完全一致,所以C只能有一个m方法,这种情况下应该怎么实现需求呢?

使用闭包和回调就是一种非常方便有效的解决方法:

public class C implements A{
    @Override
    public void m() {
        System.out.println("it is A");
    }

    private void o(){
        System.out.println("it is B");
    }

    public D getD(){
        return new D();
    }

    class D implements B{
        @Override
        public void m() {
            o();
        }
    }
}
public static void main(String[] args) {
        C c = new C();
        c.m();
        c.getD().m();
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容