电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)

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

在一個(gè)應(yīng)用系統(tǒng)中,不論使用何種編程語(yǔ)言,模塊之間要進(jìn)行調(diào)用,僅存在三種方式:同步調(diào)用、異步調(diào)用、回調(diào)。本文就其中回調(diào)方式進(jìn)行詳細(xì)解讀,并通過(guò)匿名內(nèi)部類(lèi)的手段,在最后實(shí)現(xiàn)一個(gè)同步回調(diào)的過(guò)程。

一、回調(diào)的意義

在學(xué)習(xí)回調(diào)之前,我們需要知道使用回調(diào)的原因,和回調(diào)的應(yīng)用場(chǎng)景。

不如先思考兩個(gè)問(wèn)題:

棧底對(duì)棧頂通常是不可見(jiàn)的,但是棧頂有時(shí)需要直接調(diào)用棧底 上級(jí)派下級(jí)做事,在此期間,下級(jí)可能需要通過(guò)上級(jí)獲取高權(quán)限的協(xié)助

而在本例中,回調(diào)方式被用來(lái)處理爬取后的大量返回?cái)?shù)據(jù)。在業(yè)務(wù)層面,這些數(shù)據(jù)被安排在調(diào)用方進(jìn)行處理,但是調(diào)用方卻沒(méi)有處理這些數(shù)據(jù)的足夠權(quán)限。于是,通過(guò)回調(diào),業(yè)務(wù)被很好的分層并且執(zhí)行。

二、如何實(shí)現(xiàn)同步回調(diào)

本文對(duì)同步回調(diào)的業(yè)務(wù)需求如下:

回調(diào)方調(diào)用調(diào)用方進(jìn)行數(shù)據(jù)爬取 調(diào)用方調(diào)用回調(diào)方進(jìn)行數(shù)據(jù)存儲(chǔ) 調(diào)用方調(diào)用回調(diào)方進(jìn)行日志記錄

根據(jù)需求可以得到回調(diào)過(guò)程的時(shí)序圖:

如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)

相應(yīng)代碼如下:

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()); }}

三、遇到的問(wèn)題

如果我們使用代碼來(lái)實(shí)現(xiàn)上述回調(diào)過(guò)程,不難會(huì)發(fā)現(xiàn)這樣一個(gè)問(wèn)題:Task調(diào)用Crawler,Crawler調(diào)用Handler,Hanlder調(diào)用Task。很明顯,此處存在一個(gè)環(huán),產(chǎn)生了循環(huán)依賴的問(wèn)題,而接口可以為我們提供良好的解決方案。

如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)

四、為什么通過(guò)匿名內(nèi)部類(lèi)的方式

用 Java 實(shí)現(xiàn)同步回調(diào)有許多方式,為什么我們要通過(guò)匿名內(nèi)部類(lèi)的方式來(lái)實(shí)現(xiàn)回調(diào),直接回調(diào)不香嗎?

不妨先看看直接回調(diào)的順序圖:

如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)

相應(yīng)代碼如下:

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()); }}

直接回調(diào)帶來(lái)的最大問(wèn)題便是回調(diào)接口的暴露,也就是說(shuō)回調(diào)接口不一定用于回調(diào),也可以用于直接訪問(wèn)。這在業(yè)務(wù)層面的設(shè)計(jì)上是絕對(duì)不允許的,而匿名內(nèi)部類(lèi)在執(zhí)行回調(diào)等特定業(yè)務(wù)的同時(shí),可以很好的對(duì)外隱藏用于回調(diào)的接口。

五、總結(jié)

常規(guī)類(lèi)通常無(wú)法對(duì)回調(diào)等特定接口作出限定,要么都可以訪問(wèn),要么都拒絕訪問(wèn)。而內(nèi)部類(lèi)通過(guò)犧牲自身的被訪問(wèn)權(quán)限,提升了自身訪問(wèn)外部類(lèi)的能力,這使得其成為實(shí)現(xiàn)回調(diào)的首選方案。在JAVA8中,lambda表達(dá)式本質(zhì)上就是匿名內(nèi)部類(lèi)的語(yǔ)法糖。

注:匿名內(nèi)部類(lèi)本質(zhì)上是成員內(nèi)部類(lèi)、局部?jī)?nèi)部類(lèi)的簡(jiǎn)化寫(xiě)法,這里將其統(tǒng)稱(chēng)為內(nèi)部類(lèi)。

參考鏈接

[1] <<Java核心技術(shù)>> 卷一

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

以上就是如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)的詳細(xì)內(nèi)容,更多關(guān)于Java 同步回調(diào)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | CCC验厂-家用电器|服务器CCC认证咨询-奥测世纪 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 塑料脸盆批发,塑料盆生产厂家,临沂塑料广告盆,临沂家用塑料盆-临沂市永顺塑业 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | YJLV22铝芯铠装电缆-MYPTJ矿用高压橡套电缆-天津市电缆总厂 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 软启动器-上海能曼电气有限公司| 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 风化石头制砂机_方解石制砂机_瓷砖石子制砂机_华盛铭厂家 | 深圳APP开发公司_软件APP定制开发/外包制作-红匣子科技 | 圆形振动筛_圆筛_旋振筛_三次元振动筛-河南新乡德诚生产厂家 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 山东钢衬塑罐_管道_反应釜厂家-淄博富邦滚塑防腐设备科技有限公司 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 |