回調的思想是:
類A的fa()方法調用類B的fb()方法
類B的fb()方法執行完畢主動(直接或間接)調用類A的callback()方法
在很多的關於回調的講解中,都涉及到了接口,只是因爲一般的回調都使用到了接口。其實java中的回調可以完全不關接口的事,回調只是一種思想,數據傳遞的一種方式而已,與使用不使用接口無關。
下面的例子中沒有涉及到接口,只是簡單地展示了回調的思想。這個例子中涉及三個類,類A、類B、Test類。其中只有類A和類B與回調有關,Test類中只有一個主函數,爲了測試用。
類A:
package callbacktest;
public class A {
private B b=new B();
private int numnumToBeChanged=7;
public void callMethodInB() { //在該方法中調用了B類中的方法
b.calledByA(this, numnumToBeChanged);
}
public void callbackByB(int numHasChangedByB){//該方法在B中被調用,稱爲回調方法(Callback)
System.out.print("A中傳給B的變量被B改變後的值:"+numHasChangedByB);
}
}
類B:
package callbacktest;
public class B {
public void calledByA(A a, int numToBeChanged){
System.out.println("A中傳過來的值:"+numToBeChanged);
numToBeChanged+=2; //將 numToBeChanged加2;
// 在被調用的方法中直接回調,當然也可以通過該類(B)中的其他方法回調
a.callbackByB(numToBeChanged);
}
}
Test類:
package callbacktest;
public class Test {
public static void main(String[] agr) {
A a=new A();
a.callMethodInB();
}
}
運行結果:
上面的例子中類A中的變量numnumToBeChanged
通過調用類B中的方法·b.calledByA(this, numnumToBeChanged);
將類A自身的對象和變量一起傳給類B,在類B中改變numnumToBeChanged
的值,然後通過對傳進來的類A對象的引用h回調用類A中的方法a.callMethodInB()
(稱爲回調方法)。
一般在Java中通過回調接口實現回調的方式是:在A中定義一個接口類CallbackInterface,並在A中實現該接口類並創建對象callbackInterface
,然後在A中的方法callMethodInB()
中將該對象傳給類B的對象b—b.calledByA(callbackInterface, numnumToBeChanged);
,然後在類B中將回調接口類CallbackInterface中的方法,將數據傳遞給callbackInterface
,因爲callbackInterface
是類A的變量,接口類CallbackInterface是類A的內部類,或者類A本身實現接口CallbackInterface,所以在類A中能夠接收到類B通過回調傳過來的數據。