Java 回调

 

•武林秘籍

  在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。

——摘自维基百科(看完本篇文章再来理解这个定义)

•民间偏方

  所谓的回调,就是程序员 A 写了一段程序(程序 a ),其中预留有回调函数接口,并封装好了该程序。

  程序员 B 要让 a 调用自己的程序 b 中的一个方法;

  于是,他通过 a 中的接口回调自己 b 中的方法。

•该吃药了

第一步

  首先定义一个类 A,按照上面的定义就是程序员 A 写的程序 a,这个类里面保存一个接口引用;

  新建一个  A.java ,并添加如下代码;

public class A {
    
    CallBack callBack;
    
    public void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
    
    public void call() {
        callBack.print(10);
    }
}

第二步

  当然需要接口的定义,为了方便程序员 B 根据程序 A 编写程序实现接口;

  新建一个  CallBack.java ,并添加如下代码;

public interface CallBack{
    void print(int x);
}

第三步

  第三是定义程序员 B 写的程序 b;

  新建一个  B.java ,并添加如下代码;

public class B implements CallBack{

    @Override
    public void print(int x) {
        // TODO Auto-generated method stub
        System.out.println("回调,输出的 x = "+x);
    }
    
}

万法归宗

  新建一个  Test.java ,并添加如下代码;

public class Test {

    public static void main(String[] args) {
        A a = new A();
        a.setCallBack(new B());
        a.call();
    }
}

运行结果

  

•万变不离其宗

  在测试方法中可以直接使用匿名内部类,省去  B.java  的创建;

  在新包下新建一个  Test.java ,添加如下代码;

public class Test {

    public static void main(String[] args) {
        
        A a = new A();
        
        a.setCallBack(new CallBack() {
            public void print(int x) {
                System.out.println("通过匿名内部类回调,输出的 x = "+x);
            }
        });
        
        a.call();
        
    }
}

class A {
    CallBack callBack;
    
    void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
    
    void call() {
        callBack.print(10);
    }
}

interface CallBack{
    void print(int x);
}

运行结果

  

  或者你也可以这么写:

public class Test {

    public static void main(String[] args) {
        
        A a = new A();
        
        CallBack callBack = new CallBack() {
            public void print(int x) {
                System.out.println("通过匿名内部类回调,输出的 x = "+x);
            }
        };
        a.setCallBack(callBack);
        
        a.call();
        
    }
}

class A {
    CallBack callBack;
    
    void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
    
    void call() {
        callBack.print(10);
    }
}

interface CallBack{
    void print(int x);
}

  作用都是一样的;

•班门弄斧

  参考资料:【回调函数透彻理解Java

 

posted @ 2021-02-04 21:24  MElephant  阅读(96)  评论(0编辑  收藏  举报