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();
}

  • https://blog.csdn.net/u010142437/article/details/12453501
  • https://blog.csdn.net/caiwenfeng_for_23/article/details/8230432
  • https://blog.csdn.net/yuwenhao07/article/details/53607117
  • https://blog.csdn.net/DYD850804/article/details/81111667
  • https://blog.csdn.net/sharke118/article/details/6675005

你可能感兴趣的:(2019-02-11——Java 闭包与回调)