大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 解析Java接口回調機制

解析Java接口回調機制

更新時間:2020-10-27 17:52:38 來源:動力節點 瀏覽1491次

回調(callback)是 Java 中很重要的一個概念,我們在學習Spring、Hibernate等計算框架時其實已經為Java回調機制的學習埋下了伏筆。我們都知道控制反轉(Inversion of Control,IoC),它是一個重要的面向對象編程的法則,用來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的核心。而控制反轉的本質,就是 Java接口回調機制


在某些面向過程(事件驅動)的編程語言(如 C 語言)中,開發人員可以通過傳遞函數指針(function pointer)直接實現回調機制,回調的對象可能是一段代碼塊(方法塊)。但 Java 作為一門面向對象的編程語言,并不支持方法指針(method pointer,在 Java 中,方法的地位等同于 C 中的函數),所以想實現回調機制,必須通過「對象(object)」來完成,這似乎妨礙了回調機制的完成。


回調的思想是:

類A的a()方法調用類B的b()方法

類B的b()方法執行完畢主動調用類A的callback()方法

通俗而言: 就是A類中調用B類中的某個方法C, 然后B類中反過來調用A類中的方法D, D這個方法就叫回調方法, 這樣子說你是不是有點暈暈的, 其實我剛開始也是這樣不理解, 看了人家說比較經典的回調方式:

1.class A實現接口CallBack callback——背景1

2.class A中包含一個class B的引用b ——背景2

3.class B有一個參數為callback的方法f(CallBack callback) ——背景3

4.A的對象a調用B的方法 f(CallBack callback) ——A類調用B類的某個方法 C

5.然后b就可以在f(CallBack callback)方法中調用A的方法 ——B類調用A類的某個方法D


Java「關上了一扇門,必然會為你開啟另一扇窗」,而這扇窗就是「接口」。我們通過下面的例子來說明,在 Java 中,調 Java 回調機制的演示(Caller.java)。

interface CallBack

{

void methodToCallBack( );

}

class CallBackImpl implements CallBack

{

public void methodToCallBack( )

{

System.out.println("I'"ve been called back");

}

}

public class Caller

{

public void register(CallBack callback)

{

callback.methodToCallBack( );

}

public static void main(String[] args)

{

Caller caller = new Caller( );

CallBack callBack = new CallBackImpl( );

caller.register(callBack);

}

}

保存并運行程序,結果如下圖所示。

image.png


代碼詳解

第 01~04 行,聲明了一個接口 CallBack,在這個接口中聲明了一個抽象方法 methodToCallBack( )。

第 05~11 行,用一個名為 CallBackImpl 的類,實現了接口 CallBack。

第 12~24 行,設計了一個主調類 Caller,其中第 14~17 行聲明了一個注冊方法 register(),特別需要注意的是,這個方法的參數是接口對象 CallBack 的引用。

第 20 行,新建了一個 Caller 對象,第 21 行新建了一個 CallBackImpl 的對象,它是接口 CallBack 的具體實現者。

第 22 行,調用注冊方法 register(),實參就是 CallBackImpl 的對象 callBack,因為 CallBackImpl 實現(某種程度上可以說是繼承)了抽象接口,所以在 register()方法中,callBack 可以調用 methodToCallBack()方法。

或許,讀者會困惑,為什么不在第 21 行之后這么做。

callback.methodToCallBack()

這樣豈不是更加簡便?的確如此。

但這段代碼不在于如何用最短的代碼實現具體功能,而是為了給我們展示一下,如何在 Java 環境下實現一個回調機制。

我們知道,回調機制的真正意圖,其實是為了實現「控制反轉(Inversion of Control)」。通過控制反轉,對象在被創建的時候(如第 21 行),由一個能夠調控系統內所有對象的外界實體(如第 20 行的 caller),將其所依賴的對象的引用傳遞給功能方法塊(如第 22 行的 callBack,被送入到 register()中)。

我們知道,同一個接口,可以有不同的實現類,從而使得這些不同的實現類,可以定義眾多不同的對象,而這些對象會被按需「注入」功能方法塊 register()。在被調用前,這些對象永遠處于等待調用狀態,直到有一天被回調(callback)。


由上分析可知,控制反轉可以用來降低計算機代碼之間的耦合度??偨Y起來,回調的核心就是回調方將本身即this傳遞給調用方,這樣調用方就可以在調用完畢之后告訴回調方它想要知道的信息?;卣{是一種思想、是一種機制,至于具體如何實現,如何通過代碼將回調實現得優雅、實現得可擴展性比較高,一看開發者的個人水平,二看開發者對業務的理解程度。觀看本站的Java接口教程,學習Java接口的回調機制,在你的代碼中實現Java接口的回調吧!


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲国产精品久久 | 精品国精品国产自在久国产应用 | 国产成人免费全部网站 | 成人毛片一区二区三区 | 一个色中文字幕 | 自拍亚洲国产 | 91久久精品国产一区二区 | 最近在线更新中文字幕1 | 亚洲精品一区二区三区香蕉在线看 | 888奇米| 久久亚洲国产伦理 | 亚洲黑人巨大videos0 | 国产做爰免费视频观看 | 就色干综合 | 亚洲综合视频 | 精品久久久一二三区 | 99热在线精品观看 | 伦理久久| 亚洲一区二区三区在线播放 | 六月丁香婷婷综合 | 久久久久久中文字幕 | 日日摸天天摸狠狠摸摸 | 在线视频 国产交换 | 91资源视频 | 91久久国产精品 | www.青草视频 | 亚洲色五月 | 天天干天天操天天玩 | 亚洲视频一区 | 日本最新免费二区三区 | 狠狠色噜噜狠狠狠狠91 | 天天操天天爽天天射 | 狠狠色丁香久久婷婷综合五月 | 精品成人久久 | 天天爱天天做天天爽天天躁 | 免费看一级做a爰片久久 | 在线观看亚洲免费视频 | 高清视频 一区二区三区四区 | 99热久久这里只精品国产 | 日韩免费一区二区三区 | 国产精品欧美一区二区 |