黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

解析Java接口回調(diào)機制

更新時間:2020-10-27 17:52:38 來源:動力節(jié)點 瀏覽1540次

回調(diào)(callback)是 Java 中很重要的一個概念,我們在學(xué)習(xí)Spring、Hibernate等計算框架時其實已經(jīng)為Java回調(diào)機制的學(xué)習(xí)埋下了伏筆。我們都知道控制反轉(zhuǎn)(Inversion of Control,IoC),它是一個重要的面向?qū)ο缶幊痰姆▌t,用來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的核心。而控制反轉(zhuǎn)的本質(zhì),就是 Java接口回調(diào)機制。


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


回調(diào)的思想是:

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

類B的b()方法執(zhí)行完畢主動調(diào)用類A的callback()方法

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

1.class A實現(xiàn)接口CallBack callback——背景1

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

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

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

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


Java「關(guān)上了一扇門,必然會為你開啟另一扇窗」,而這扇窗就是「接口」。我們通過下面的例子來說明,在 Java 中,調(diào) Java 回調(diào)機制的演示(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);

}

}

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

image.png


代碼詳解

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

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

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

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

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

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

callback.methodToCallBack()

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

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

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

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


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


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 黄在线观看网站 | 久草综合在线视频 | 五月天天色 | 国产欧美精品三区 | 在线小毛片 | 男女扒开双腿猛进入免费看污 | 午夜一级毛片 | 插丝袜 | 亚洲国产中文字幕 | 一级夫妻录像 | 亚洲成人婷婷 | 国产成人h福利小视频在线观看 | 成人日皮视频 | 久久精品a亚洲国产v高清不卡 | 国产免费爽爽视频免费可以看 | 月婷婷色狠狠 | 91亚洲综合| 免费一级录像 | 天天精品视频 | 欧美九九视频 | 91短视频在线免费观看 | 黄色影视网站 | 人人做人人插 | 免费在线观看污片 | 亚洲第一页中文字幕 | a视频网站| 日本一区二区在线 | 五月婷视频 | 涩涩涩丁香色婷五月网视色 | 日本三级香港三级人妇网站 | 成人欧美精品大91在线 | 亚洲www美色 | 日韩高清性爽一级毛片免费 | 亚洲色图天堂 | 18成人免费观看网站入口 | 在线亚洲欧洲国产综合444 | 久久久国产视频 | 天天做天天摸 | 美女被cao免费看在线看网站 | 中国一级特黄剌激爽毛片 | 影音先锋2020色资源网 |