回撥函式定義
阿新 • • 發佈:2018-11-19
在計算機程式設計中,回撥函式,或簡稱回撥,是指通過函式引數傳遞到其它程式碼的,某一塊可執行程式碼的引用。這一設計允許了底層程式碼呼叫在高層定義的子程式。
在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(); } }