利用接口來實現(xiàn)回調(diào),即在調(diào)用回調(diào)函數(shù)的類中實現(xiàn)接口,并實現(xiàn)接口中的方法即回調(diào)的方法,被調(diào)用類中存在接口的熟悉,并將調(diào)用類中的接口實例賦值給被調(diào)用類中,被調(diào)用類中通過調(diào)用這個接口的方法來實現(xiàn)回調(diào)。java中沒有函數(shù)的指針,所以通過接口(調(diào)用類實現(xiàn)接口的方法,即回調(diào)的函數(shù))來實現(xiàn)。
那么這個接口能否用抽象類來代替?其實是可以的,抽象類也可以用匿名的方式實現(xiàn)。
1、回調(diào)接口
public interface Callback {
String callBack();
}
2、被調(diào)用者
public class Another {
private Callback callback;
//調(diào)用實現(xiàn)類的方法
public void setCallback(Callback callback) {
this.callback = callback;
}
//業(yè)務(wù)需要的時候,通過委派,來調(diào)用實現(xiàn)類的具體方法
public void doCallback(){
//...相應(yīng)操作
//在合適位置調(diào)用回調(diào)方法
System.out.println(callback.callBack());
}
}
3、測試回調(diào)函數(shù)
public class TestCallcack {
public static void main(String[] args) {
//創(chuàng)建調(diào)用者的實現(xiàn)類
Another another = new Another();
//將回掉接口注冊到實現(xiàn)類中
another.setCallback(new Callback() { //匿名類實現(xiàn)接口
@Override
public String callBack() {
//通過實現(xiàn)接口函數(shù),來注冊回調(diào)函數(shù)
return "you are a pig";
}
});
//執(zhí)行函數(shù),將回調(diào)setCallback中實現(xiàn)接口函數(shù)
another.doCallback();
}
}
其中TestCallback中用匿名類來實現(xiàn)接口Callback
new Callback(){
@Override
public String callBack(){
//....
}
}
異步調(diào)用可以新建一個線程去執(zhí)行函數(shù)調(diào)用,如下:
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
Another a = new Another();
a.setCallback(new Callback() { //匿名類實現(xiàn)接口
public String callBack() {
//通過實現(xiàn)接口函數(shù),來注冊回調(diào)函數(shù)
return "you are a pig";
}
});
a.doCallback();
}
}).start();
異步回調(diào)參考下面這篇文章: