關於JAVA中回調的理解

回調的思想是:
類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通過回調傳過來的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章