1. 程式人生 > >java中的回撥(callback)機制簡述

java中的回撥(callback)機制簡述

在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回撥。