JAVA回調機制解析

来源:http://www.cnblogs.com/Daniel-android/archive/2017/01/04/6249443.html
-Advertisement-
Play Games

一、回調機制概述 回調機制在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  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • RSA.h #ifndef _RSA_H #define _RSA_H #include #include #include /* 密鑰產生: 1.隨機選定兩個大素數p, q. 2.計算公鑰和私鑰的公共模數 n = pq . 3.計算模數n的歐拉函數 φ(n) . 4.選定一個正整數e, 使1 e,... ...
  • SHA-1.cpp TEST.cpp ...
  • if __name__== "__main__" 的意思(作用)python代碼復用 轉自:大步's Blog http://www.dabu.info/if-__-namelxx_-main__-mean-function-python-code-reuse.html 有人在學習python腳本時 ...
  • Java是最早開始有併發的語言之一,再過去傳統多任務的模式下,人們發現很難解決一些更為複雜的問題,這個時候我們就有了併發. 引用 & 160; & 160; & 160; & 160;多線程比多任務更加有挑戰。多線程是在同一個程式內部並行執行,因此會對相同的記憶體空間進行併發讀寫操作。這可能是在單線程 ...
  • 本文由博主原創,轉載請註明出處:我的博客-知乎爬蟲之爬蟲流程設計 git爬蟲項目地址(關註和star在哪裡~~):https://github.com/MatrixSeven/ZhihuSpider (已完結) 附贈之前爬取的數據一份(mysql): 鏈接:https://github.com/Ma ...
  • 要知道什麼是智能指針,首先瞭解什麼稱為 “資源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“資源分配即初始化” 在《C++ Primer》這樣解釋的,“通過定義一個類來封裝資源的分配和釋放,可以保證正確釋放資源” 核心 ...
  • 結果: ...
  • 一. 異常的定義 在《java編程思想》中這樣定義 異常:阻止當前方法或作用域繼續執行的問題。雖然java中有異常處理機制,但是要明確一點,決不應該用"正常"的態度來看待異常。絕對一點說異常就是某種意義上的錯誤,就是問題,它可能會導致程式失敗。之所以java要提出異常處理機制,就是要告訴開發人員,... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...