1. 程式人生 > >回撥函式定義

回撥函式定義

在計算機程式設計中,回撥函式,或簡稱回撥,是指通過函式引數傳遞到其它程式碼的,某一塊可執行程式碼的引用。這一設計允許了底層程式碼呼叫在高層定義的子程式。

在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