回调函数定义

在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

在Java里面,我们使用接口来实现回调。 所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。下面是例子。

1. 首先定义一个类Caller,按照上面的定义就是程序员A写的程序a,这个类里面保存一个接口引用。
public class Caller {  
    private MyCallInterface callInterface;  
      
    public Caller() {  
    }  
      
    public void setCallFunc(MyCallInterface callInterface) {  
        this.callInterface = callInterface;  
    }  
      
    public void call() {  
        callInterface.printName();  
    }  
} 
2. 当然需要接口的定义,为了方便程序员B根据我的定义编写程序实现接口。
public interface MyCallInterface {  
    public void  printName();  
} 
3.第三是定义程序员B写的程序b
public class Client implements MyCallInterface {  
  
    @Override  
    public void printName() {  
        System.out.println("This is the client printName method");  
    }  
}
4.测试如下
public class Test {  
    public static void main(String[] args) {  
        Caller caller = new Caller();  
        caller.setCallFunc(new Client());  
        caller.call();  
    }  
}

看到这里应该明白什么是回调了,有些文章介绍的很好,但是刚开始没看明白,是因为把第3步的类省略,直接写成匿名类了。

5. 在测试方法中直接使用匿名类,省去第3步。
public class Test {  
    public static void main(String[] args) {  
        Caller caller = new Caller();  
//      caller.setCallFunc(new Client());  
        caller.setCallFunc(new MyCallInterface() {  
            public void printName() {  
                System.out.println("This is the client printName method");  
            }  
        });  
        caller.call();  
    }  
}

原文:http://cache.baiducontent.com/c?m=9d78d513d99b12eb0bfa940f1a66a7716f5e97133bc0a41068d5e35fe3174c32337192c830566610948522685be90f1eabe737012a1e70e9c69d9f4aaaead37e739f27432c4bc05c51900ea8bf4623c32a9651e9a804b4fab669c2f085ce89031599085b3b9df48c5c0616cd6df0&p=9c6dc116d9c15afb08e2977c0b649c&newp=ce769a478cd01bff57ee9678424781231610db2151d6d6146b82c825d7331b001c3bbfb423261203d9c5786607a84257e9f43277330923a3dda5c91d9fb4c57479d2346e&user=baidu&fm=sc&query=java+�ص�����&qid=e83b1eb100001731&p1=3

猜你喜欢

转载自blog.csdn.net/daijiguo/article/details/82838651