回調函數實際上就是在調用某個函數(通常是API函數)時,將自己的一個函數(這個函數為回調函數)的地址作為參數傳遞給那個函數。而那個函數在需要的時候,利用傳遞的地址調用回調函數,這時你可以利用這個機會在回調函數中處理消息或完成一定的操作。
定義三個類,分別是主函數類,callback函數的接口類,業務處理類,在業務處理類中,處理完業務之后,執行一個callback函數。
package comz;
public class Main {
public static void main(String[] args) {
new TestCallBack().compute(1000, new ComputeCallBack() {
@Override
public void onComputeEnd() {
System.out.println("end back!!!");
}
});
}
}
這是主函數類。new了一個業務處理類來處理邏輯,並在處理完畢之后,執行callback函數。
package comz;
public class TestCallBack {
public void compute(int n, ComputeCallBack callback) {
for (int i = 0; i < n; i++) {
System.out.println(i);
}
callback.onComputeEnd();
}
}
這是業務處理類。僅僅輸出一些數字,然后執行回調函數。
package comz;
public interface ComputeCallBack {
public void onComputeEnd();
}
這是回調函數的接口。
--------------------------------------
運行上面的代碼,就會在輸出結束的時候調用在Main里面的callback函數,輸出
1 0,1,2,3,4,5,6,7,8,9, 2 call complete......
--------------------------------------
這里的原理是:
在主類中,新建業務類的時候,傳遞進去的第二個參數是一個實現了回調接口的匿名類對象。
在業務類中,我們調用了這個對象的onComputeEnd方法。在執行onComputeEnd的時候,jvm會找到這個對象的函數實現並調用。於是就輸出了end back!!!
