Java編程接口回調(diào)一般用法代碼解析
接口回調(diào)是指:可以把使用某一接口的類(lèi)創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調(diào)用被類(lèi)實(shí)現(xiàn)的接口的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類(lèi)實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法,這一過(guò)程稱為對(duì)象功能的接口回調(diào)。
Java接口回調(diào)一般用法:實(shí)現(xiàn)接口實(shí)際上和繼承抽象類(lèi)類(lèi)似,只不過(guò)繼承是在類(lèi)的層面上操作,接口是在方法和常量集合的層面上操作,接口比抽象類(lèi)更抽象、更簡(jiǎn)潔??梢园褜?shí)現(xiàn)接口看成繼承特定的一個(gè)或多個(gè)方法以及一些常量,關(guān)于接口的具體規(guī)則這里不贅述。
為什么要使用接口和抽象類(lèi)?因?yàn)閺暮芏嘟嵌戎v,這樣做符合面向?qū)ο蟮脑O(shè)計(jì)思想,比如開(kāi)閉原則等。
從實(shí)際開(kāi)發(fā)的角度講,Java不支持多繼承,為了彌補(bǔ)這一點(diǎn),接口的存在就極為重要,和繼承不同,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。
接口的一大作用是實(shí)現(xiàn)回調(diào),回調(diào)分同步回調(diào)和異步回調(diào),區(qū)別是異步回調(diào)使用了多線程技術(shù),當(dāng)回調(diào)中有耗時(shí)操作時(shí),就需要使用異步回調(diào)。
以下全部以異步回調(diào)為例。以下以java寫(xiě)法為例,android同理。
1、一般用法
新建入口類(lèi) Main,并新建接口 InterfaceExample
public class Main implements InterfaceExample{ public static void main(String[] args) { System.out.println("------接口使用測(cè)試--------"); InterfaceTest test = new InterfaceTest(); //調(diào)用InterfaceTest的handleThings方法,并傳遞Main的實(shí)例 test.handleThings(new Main()); System.out.println("------異步回調(diào)測(cè)試--------"); } @Override //重寫(xiě)接口方法 public void sendMessage(String string) { System.out.println("接口回調(diào)成功,利用 " + string + " 做一些事"); } } //接口也可以寫(xiě)在一個(gè)獨(dú)立的.java文件里 interface InterfaceExample { void sendMessage(String string); }
下面新建發(fā)起回調(diào)的類(lèi)InterfaceTest
public class InterfaceTest { //注意這里Main實(shí)例向上轉(zhuǎn)型,接口變量引用了Main實(shí)例 public void handleThings(InterfaceExample example) { new Thread(new Runnable() { @Override public void run() { System.out.println("-----做一些事------"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //回調(diào)接口方法 example.sendMessage("接口傳的參數(shù)"); } }).start(); } }
最后運(yùn)行輸出:
------接口使用測(cè)試-------- ------異步回調(diào)測(cè)試-------- -----做一些事------ 接口回調(diào)成功,利用 接口傳的參數(shù) 做一些事
其中異步的處理也可以在Main中調(diào)用handleThings時(shí)進(jìn)行。
2、結(jié)合匿名內(nèi)部類(lèi)實(shí)現(xiàn)接口回調(diào)
第二種方法只需要在第一種的基礎(chǔ)上修改Main類(lèi)就可以
public class Main { public static void main(String[] args) { System.out.println("------接口使用測(cè)試--------"); InterfaceTest test = new InterfaceTest(); //調(diào)用InterfaceTest的handleThings方法,并使用實(shí)現(xiàn)了InterfaceExample接口的匿名內(nèi)部類(lèi) //在該匿名內(nèi)部類(lèi)中重寫(xiě)接口方法 test.handleThings(new InterfaceExample() { @Override //重寫(xiě)接口方法 public void sendMessage(String string) { System.out.println("接口回調(diào)成功,利用 " + string + " 做一些事"); } }); System.out.println("------異步回調(diào)測(cè)試--------"); } } interface InterfaceExample { void sendMessage(String string); }
可以看到,采用匿名內(nèi)部類(lèi)的方式可以簡(jiǎn)化代碼,使程序結(jié)構(gòu)更清晰。所以這種用法很常見(jiàn),比如android系統(tǒng)提供的view的點(diǎn)擊事件就是采用這種形式進(jìn)行回調(diào)。
輸出是一樣的:
------接口使用測(cè)試-------- ------異步回調(diào)測(cè)試-------- -----做一些事------ 接口回調(diào)成功,利用 接口傳的參數(shù) 做一些事。
本文關(guān)于Java編程接口回調(diào)一般用法的介紹就到這里,希望對(duì)大家有所幫助。
相關(guān)文章
springboot使用Validator校驗(yàn)方式
這篇文章主要介紹了springboot使用Validator校驗(yàn)方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01Java匿名類(lèi),匿名內(nèi)部類(lèi)實(shí)例分析
這篇文章主要介紹了Java匿名類(lèi),匿名內(nèi)部類(lèi),結(jié)合實(shí)例形式分析了Java匿名類(lèi),匿名內(nèi)部類(lèi)相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04springbootAOP定義切點(diǎn)獲取/修改請(qǐng)求參數(shù)方式
這篇文章主要介紹了springbootAOP定義切點(diǎn)獲取/修改請(qǐng)求參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08關(guān)于mybatis的一級(jí)緩存和二級(jí)緩存的那些事兒
MyBatis自帶的緩存有一級(jí)緩存和二級(jí)緩存,今天我們就來(lái)學(xué)習(xí)一下,文中有非常詳細(xì)的總結(jié),對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法
今天小編就為大家分享一篇關(guān)于實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02java后端把數(shù)據(jù)轉(zhuǎn)換為樹(shù),map遞歸生成json樹(shù),返回給前端(后臺(tái)轉(zhuǎn)換)
這篇文章主要介紹了java后端把數(shù)據(jù)轉(zhuǎn)換為樹(shù),map遞歸生成json樹(shù),返回給前端實(shí)例(后臺(tái)轉(zhuǎn)換),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-01-01new出來(lái)的對(duì)象中無(wú)法使用@autowired進(jìn)行對(duì)象bean注入問(wèn)題
這篇文章主要介紹了基于new出來(lái)的對(duì)象中無(wú)法使用@autowired進(jìn)行對(duì)象bean注入問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02