亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

如何用匿名內部類實現 Java 同步回調

瀏覽:19日期:2022-08-21 18:28:32

在一個應用系統中,不論使用何種編程語言,模塊之間要進行調用,僅存在三種方式:同步調用、異步調用、回調。本文就其中回調方式進行詳細解讀,并通過匿名內部類的手段,在最后實現一個同步回調的過程。

一、回調的意義

在學習回調之前,我們需要知道使用回調的原因,和回調的應用場景。

不如先思考兩個問題:

棧底對棧頂通常是不可見的,但是棧頂有時需要直接調用棧底 上級派下級做事,在此期間,下級可能需要通過上級獲取高權限的協助

而在本例中,回調方式被用來處理爬取后的大量返回數據。在業務層面,這些數據被安排在調用方進行處理,但是調用方卻沒有處理這些數據的足夠權限。于是,通過回調,業務被很好的分層并且執行。

二、如何實現同步回調

本文對同步回調的業務需求如下:

回調方調用調用方進行數據爬取 調用方調用回調方進行數據存儲 調用方調用回調方進行日志記錄

根據需求可以得到回調過程的時序圖:

如何用匿名內部類實現 Java 同步回調

相應代碼如下:

public interface Handler { void handle(String info);}public class Task { private String info; private void setInfo(String info) { this.info = info; } public void call() { Crawler.getInstance().crawl(new Handler() { @Override public void handle(String info) {setInfo(info); } }); }}public class Crawler { private static Crawler instance = null; public static Crawler getInstance() { if (instance == null) { instance = new Crawler(); } return instance; } private String getInfo() { return 'the info from crawler'; } public void crawl(Handler handler) { handler.handle(getInfo()); }}

三、遇到的問題

如果我們使用代碼來實現上述回調過程,不難會發現這樣一個問題:Task調用Crawler,Crawler調用Handler,Hanlder調用Task。很明顯,此處存在一個環,產生了循環依賴的問題,而接口可以為我們提供良好的解決方案。

如何用匿名內部類實現 Java 同步回調

四、為什么通過匿名內部類的方式

用 Java 實現同步回調有許多方式,為什么我們要通過匿名內部類的方式來實現回調,直接回調不香嗎?

不妨先看看直接回調的順序圖:

如何用匿名內部類實現 Java 同步回調

相應代碼如下:

public interface Handler { void handle(String info);}public class Task implements Handler{ private String info; private void setInfo(String info) { this.info = info; } public void call() { Crawler.getInstance().crawl(this); } @Override public void handle(String info) { setInfo(info); }}public class Crawler { private static Crawler instance = null; public static Crawler getInstance() { if (instance == null) { instance = new Crawler(); } return instance; } private String getInfo() { return 'the info from crawler'; } public void crawl(Handler handler) { handler.handle(getInfo()); }}

直接回調帶來的最大問題便是回調接口的暴露,也就是說回調接口不一定用于回調,也可以用于直接訪問。這在業務層面的設計上是絕對不允許的,而匿名內部類在執行回調等特定業務的同時,可以很好的對外隱藏用于回調的接口。

五、總結

常規類通常無法對回調等特定接口作出限定,要么都可以訪問,要么都拒絕訪問。而內部類通過犧牲自身的被訪問權限,提升了自身訪問外部類的能力,這使得其成為實現回調的首選方案。在JAVA8中,lambda表達式本質上就是匿名內部類的語法糖。

注:匿名內部類本質上是成員內部類、局部內部類的簡化寫法,這里將其統稱為內部類。

參考鏈接

[1] <<Java核心技術>> 卷一

[2] https://www.cnblogs.com/xrq730/p/6424471.html

以上就是如何用匿名內部類實現 Java 同步回調的詳細內容,更多關于Java 同步回調的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 久热99这里只有精品视频6 | 国产草逼视频 | 国产区亚洲区 | 国产黄页在线观看 | 一级香蕉免费毛片 | 成人免费淫片95视频观看网站 | 国产一区91 | 国产综合精品在线 | 日本hd高清xxxxvideos | 日韩一区二区三区四区 | 日韩一级片| 海天翼精品一区二区三区 | 国产精品日韩欧美在线 | 1024手机在线观看视频 | 中文字幕在线精品视频万部 | 亚洲夜色综合久久 | 自拍偷拍国语对白 | 亚洲一区二区中文 | 国产青草视频在线观看 | 亚洲日本中文字幕在线2022 | 国产高清1024永久免费 | 国产理论自拍 | 免费a在线观看 | 精品一区二区影院在线 | 国产无套乱子伦精彩是白视频 | 视频二区肥岳精品推荐 | 欧美特黄一级高清免费的香蕉 | 国产麻豆精品免费密入口 | 最近最新中文字幕在线第一页 | 一级毛片在线完整免费观看 | 欧美精品在线免费观看 | 亚洲欧美日韩国产综合 | 2020亚洲欧美日韩在线观看 | 国产精品一区高清在线观看 | 日韩有码在线播放 | 国产精品久草 | 最新日韩中文字幕 | 免费网站看v片在线成人国产系列 | 国产精品亚洲色图 | 夜夜拍夜夜爽夜夜拍拍拍 | 国产美女一区精品福利视频 |