java中的回撥(callback)機制簡述
阿新 • • 發佈:2019-02-18
在java中,回撥用的十分頻繁;Android開發中,回撥往往出現在相機的預覽、採圖中,這裡我們來簡單地說明一下回調的實現原理;
回撥,顧名思義就是在呼叫之後返回呼叫。java回撥方法簡單的說就是:假設有兩個類class A和class B,在B中呼叫A類的一個方法a1,而a1在執行時又呼叫了B類中的方法b1,則b1就稱為回撥函式。
java中,回撥的實現一般與介面聯絡在一起一般有如下套路:
首先,定義一個介面”interface in”,其中有方法inFun;
然後,定義類”class B implements in”,並實現介面in中的方法inFun,且有方法funB;
接著,定義類”class A”,其中有方法funA,且funA的形參中有一個為介面in型別,該方法被B的方法funB呼叫,並在該方法中呼叫方法inFun,由於方法inFun在類B中實現,所以inFun即可以稱為類B的回撥函式;
最後,由主函式來呼叫類B中的方法funB,即可以實現回撥。
以下為一個例項,新建一個Java專案:
1、定義介面:
public interface DoJob {
void fillBlank(int a, int b, int result);
}
其中,介面中有方法fillBlank,對應上述中的inFun;
2、定義類B
public class Student implements DoJob{ private String name = null; public void setName(String theName) { name = theName; } public void callHelp(int a, int b, Student stu) { new Calculator().add(a, b, stu); } public void fillBlank(int a, int b, int result) { System.out.println(name + " please for help, " + "the result is " + a + "+" + b + "=" + result); } }
其中,方法callHelp對應上述講解中的funB,fillBlank為實現介面中的方法;
3、定義類A
public class Calculator {
private String name = null;
public void setName(String theName){
name = theName;
}
public void add(int a, int b, DoJob job ){
int result = a + b;
job.fillBlank(a, b, result);
}
}
其中,方法add即對應上述中的funA,在該方法中呼叫介面方法inFun,即fillBlank;
4、在主方法中實現回撥
public class CallbackTest {
public static void main(String[] args){
Student xiaoMing = new Student();
xiaoMing.setName("Xiao Ming");
Calculator xiaoHong = new Calculator();
xiaoHong.setName("Xiao Hong");
int cal1 = 123;
int cal2 = 1123;
xiaoMing.callHelp(cal1, cal2, xiaoMing);
}
}
其中,方法的呼叫順序為:callHelp → add → fillBlank(回撥函式),從而實現java回撥。