程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA回調機制解析,java回調機制

JAVA回調機制解析,java回調機制

編輯:JAVA綜合教程

JAVA回調機制解析,java回調機制


一、回調機制概述

    回調機制在JAVA代碼中一直遇到,但之前不懂其原理,幾乎都是繞著走。俗話說做不願意做的事情叫做突破,故誕生了該文章,算是新年的新氣象,新突破!     回調機制是什麼?其實回調機制一直在我們身邊存在著,只是我們習慣了存在就未曾察覺,懂得其原理就很簡單了。     先打個比方,設置場景如下,教師,成績差學生A,成績好學生B,詳細步驟如下:    (1)教師讓學生A計算 一道題目 a+b=?    (2)學生A苦於技能cd(臣妾做不到),不會計算,請求學生B幫忙完成    (3)學生B根據學生A告訴他的 a和b的值計算出最後的答案,然後傳給學生A    (4)學生A得知到計算的答案,歡喜地告訴教師 二、實現代碼解析     (1)先定義一個統一的接口
public interface CallBack {
	public void solve(int result);
}
    (2)Class A的實現 尤其注意的是,StudentA初始化時,需要傳入StudentB的對象,方便在請求幫助的時候有指定的對象
public class StudentA implements CallBack{
	private StudentB mStuB;
	
	public StudentA(StudentB mStuB){
		this.mStuB = mStuB;
	}
	
	public void askQuestion(final int a,final int b){
		new Thread(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				mStuB.executeMessage(StudentA.this, a, b);
			}
			
		}).start();
	}

	@Override
	public void solve(int result) {
		// TODO Auto-generated method stub
		System.out.println(result);
	}
}

(3)Class B的實現

public class StudentB {
	
	public void executeMessage(CallBack callBack,int a,int b){
		System.out.println("A的問題是:"+a +" + "+ b+"=?");
		
		int result = a + b;
		
		callBack.solve(result);
	}
	
}

 (4)值的初始化

public class CallBackTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 1;
		int b = 1;
		
		StudentB mStuB = new StudentB();
		StudentA mStuA = new StudentA(mStuB);

		mStuA.askQuestion(a,b);
	}
}

 

三、總結     參考網上經典的诠釋如下:
  • Class A實現接口CallBack callback——背景1
   public Class StudentA implements CallBack
  • Class A中包含一個class B的引用b ——背景2  
    Student A初始化的時候,傳入Student B的對象 mStuB,便於在執行askQuestion方法時,有指向的mStuB對象
  • class B有一個參數為callback的方法f(CallBack callback) ——背景3
    Student B在執行完請求後,需要回調告知StudentA,故需要通過callback變量來傳遞,使用了父類引用指向子類對象
  • A的對象a調用B的方法 f(CallBack callback) ——A類調用B類的某個方法 C
    mStuA.askQuestion(a,b) -> mStuB.executeMessage(StudentA.this, a, b)
  • 然後b就可以在f(CallBack callback)方法中調用A的方法 ——B類調用A類的某個方法D
    executeMessage() -> callBack.solve(result) (父類引用指向子類對象)   四、相關推薦 http://blog.csdn.net/xiaanming/article/details/8703708/ http://blog.csdn.net/pi9nc/article/details/23169357  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved