亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

再談java回調函數

2019-11-26 15:03:15
字體:
來源:轉載
供稿:網友

又遇到了回調函數,這次打算寫下來分享一下。

所謂回調函數,或者在面向對象語言里叫回調方法,簡單點講,就是回頭在某個時間(事件發生)被調用的函數。

再詳細點:就是一個函數A,作為參數,傳入了另一個函數B,然后被B在某個時間調用。

這里可以有疑問了,既然是一個函數調用另一個函數,可以在函數體里面調用啊,為什么還要把函數作為參數傳到另一個函數里被調用?何況還有一些語言(比如java)不支持把函數作為參數。

對的,確實可以在函數體里調用另一個函數,功能上好像是沒差別的,但是這里有一個問題,就是你要調用的這個函數被寫死了,也就是說這樣函數B只能調用函數A了,這樣如果在另一個情景下,有個與A不同實現的函數C也需要在B的某個時刻被調用,那怎么辦。

下面繼續說回調函數,在c/c++里,回調函數可以使用函數指針作為參數被另一個函數調用;在c#里,可以使用委托,如果是事件方法的話,還有event關鍵字;在python和javascript里,可以直接把函數當對象傳參,這些語言都很好實現回調函數(方法),可是, java呢? 先說點題外話,自從學了C#,就不喜歡java了,曾經一度打算以后不再用java,可是現實并沒有那么理想,我現在要做android,所以還是不能放下java,而且今天遇到這個回調函數的問題,也是從java里遇到的,我個人覺得,在這個博客里出現的語言,除了java外,對于回調,都可以既容易,又好理解的實現,但是java,我覺得并不是那樣,不然我也不會來寫這篇博客。

好了繼續說,關于java中的回調方法的實現。這篇博客的重點就是說java的。 在java中,回調方法是用借用接口來實現的,我在網上找到一句話:

“把實現某一接口的類所創建的對象的引用,賦值給該接口聲明的接口變量,那么該接口變量就可以調用被實現的接口的方法”。
很繞哈,簡單解釋下:
有一個接口,接口里有一個方法(這個方法就是要回調的方法):

interface CallBackInterface {  void callBackMethod();}

我們知道,接口對象不能直接用,因為里面的方法都沒有實現。所以要找個類實現這個接口。
所以現在加一個類,實現這個接口:

interface CallBackInterface {  void callBackMethod();}class CallBackClass implements CallBackInterface{  @Override  public void callBackMethod() {    System.out.println("hello");  }}

好了,最后一步:把實現了接口的類的對象賦值給聲明的接口變量(我給寫進一個方法里了,然后外面加了個類的殼子):

public class CallBackTest {  interface CallBackInterface {    void callBackMethod();  }  class CallBackClass implements CallBackInterface {    @Override    public void callBackMethod() {      System.out.println("hello");    }  }  public void showCallBack() {    CallBackInterface itfs = new CallBackClass();    itfs.callBackMethod();  }}

現在可以調用試試看了:

public class Test {  public static void main(String[] args) {    new CallBackTest().showCallBack();  }}

沒意外的話,會成功輸出hello,反正我這邊是的.

例子看完了,所以說我做了什么呢? 再詳細點說,我們有一個要在某一個方法里被調用的方法(這個方法就是回調方法), 前面我們也說了,最好不要直接把想要回調方法做的事直接寫在調用方法里, 又因為java里沒法把方法當做參數傳遞,所以我們只好把這個回調方法放在了接口里(為什么不是類?不是抽象類?而是接口?你可以自己去找下抽象類與接口的異同,自己解決這個問題)。有接口的話,就要被類實現,然后,只要是給接口的對象賦予實現類的對象,這個接口的對象就可以調用那個方法了。理解這里的話,有一個重點,就是多態, 這里用到的多態知識就是,接口的對象可以順利被子類賦值,并且調用子類的重寫方法(類也有類似的概念)。

再多說一點,這里任何實現了CallbackInterface接口的類,都可以像下面這樣放在new后面(就是賦值):

public class CallBackTest {  interface CallBackInterface {    void callBackMethod();  }  class CallBackClass implements CallBackInterface {    @Override    public void callBackMethod() {      System.out.println("hello");    }  }  class Controller {    private CallBackInterface cbitf;    // 這個boolean只是為了模擬有事件,沒啥實用價值    public boolean somethingHappend;    // 這里確實可以直接把CallBackClass做參數,而且省掉接口的定義    // 但是這樣做的話,就像是回調函數直接寫在了調用函數里一樣    // 不明白的話就好好理解下"約定"和"調用者不管回調函數是怎么實現的"吧    public Controller(CallBackInterface itfs) {      somethingHappend = true;      this.cbitf = itfs;    }    public void doSomething() {      if(somethingHappend) {        cbitf.callBackMethod();      }    }  }  public void showCallBack() {    CallBackClass cbc = new CallBackClass();    Controller ctrlr = new Controller(cbc);    ctrlr.doSomething();    // 其實上面也可以這樣寫在一行里    // new Controller(new CallBackClass()).doSomething();  }}

最后多說一點,其實這種應用在android里會經常遇到,我就是在學android的時候遇到的。

以上就是個人對于回調函數的理解和使用方法了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最新91在线视频| 中文字幕欧美精品日韩中文字幕| 色先锋资源久久综合5566| 日韩av有码在线| 欧美激情国产高清| 久久青草福利网站| 日韩精品免费在线播放| 日韩中文字在线| 亚洲人成网站色ww在线| 成人久久一区二区| 日本一区二区在线播放| 欧美日韩国产色视频| 国产精品精品一区二区三区午夜版| 欧美夜福利tv在线| 日韩视频永久免费观看| 欧美丰满老妇厨房牲生活| 亚洲va久久久噜噜噜久久天堂| 成人深夜直播免费观看| 日韩中文在线观看| 亚洲日本欧美中文幕| 亚洲第一精品自拍| 欧美在线一级va免费观看| 精品欧美aⅴ在线网站| 91亚洲精品久久久久久久久久久久| 亚洲白虎美女被爆操| 91久久在线观看| 欧美成人sm免费视频| 成人黄色在线播放| 久久久久国色av免费观看性色| 国产专区欧美专区| 久久精品国产欧美亚洲人人爽| 久久精品视频99| 日韩欧美在线一区| 欧美人与性动交a欧美精品| 亚洲天堂av在线免费观看| 久久久人成影片一区二区三区观看| 成人黄在线观看| 欧美韩日一区二区| 日av在线播放中文不卡| 亚洲欧美国产一本综合首页| 欧美成人免费全部观看天天性色| 国产精品第8页| 亚洲人成绝费网站色www| 黄色成人在线播放| 伊人伊成久久人综合网小说| 亚洲精品456在线播放狼人| 日韩精品视频免费专区在线播放| 免费成人高清视频| 亚洲色图在线观看| 久久久国产视频91| 最近2019中文字幕在线高清| 国产ts一区二区| 日韩av网站在线| 国产精品久久久久久久久久久新郎| 日韩在线免费av| 国内精品国产三级国产在线专| 国产欧美精品一区二区三区介绍| 国产欧美在线观看| 国内精品久久久久伊人av| 日本成人精品在线| 一区二区三区精品99久久| 欧美日韩视频在线| 欧美美女操人视频| 成人黄色片网站| 国产精品成人aaaaa网站| 中文字幕日韩欧美在线| 国产91精品久久久| 日本一本a高清免费不卡| 成人信息集中地欧美| 2020国产精品视频| 91成人国产在线观看| 国产亚洲欧美日韩精品| 国产一区二区三区四区福利| 久久亚洲综合国产精品99麻豆精品福利| 日韩激情视频在线播放| 亚洲欧洲第一视频| 欧美一级高清免费播放| 欧美成人午夜影院| 国产精品久久久久久久久久久不卡| 色综合91久久精品中文字幕| 久久成人精品视频| 亚洲天堂一区二区三区| 欧美激情亚洲另类| 97不卡在线视频| 成人免费淫片视频软件| 中文字幕亚洲一区二区三区| 亚洲r级在线观看| 国产精品h片在线播放| 91久久久久久久一区二区| 色婷婷久久一区二区| 国产视频精品一区二区三区| 亚洲跨种族黑人xxx| 九九热在线精品视频| 亚洲aⅴ日韩av电影在线观看| 91精品国产91久久久久久最新| 国产精品∨欧美精品v日韩精品| 国产亚洲视频中文字幕视频| 亚洲午夜未满十八勿入免费观看全集| 欧美成人精品一区二区| xxxx欧美18另类的高清| 欧美另类精品xxxx孕妇| 91高清视频免费观看| 久久久噜噜噜久久中文字免| 国产精品无av码在线观看| 国产成人欧美在线观看| 亚洲精品视频久久| 成人观看高清在线观看免费| 国产精品日韩精品| 日韩美女在线播放| 欧美日韩激情视频| 色婷婷av一区二区三区在线观看| 亚洲性线免费观看视频成熟| 亚洲国产精品久久精品怡红院| 久久国产精品偷| 国产精品稀缺呦系列在线| 欧美激情视频网址| 成人伊人精品色xxxx视频| 欧美激情中文字幕在线| 久久99热这里只有精品国产| 欧美在线视频免费播放| 亚洲欧美日韩中文视频| 国产成人高清激情视频在线观看| 欧美成人四级hd版| 亚洲网站在线看| 久久夜精品va视频免费观看| 精品调教chinesegay| 欧美性开放视频| 亚洲精品乱码久久久久久金桔影视| 欧美国产日本在线| 中文字幕精品一区二区精品| 国产日韩中文字幕在线| 国产一区二区日韩精品欧美精品| 日韩欧美精品网址| 久久亚洲一区二区三区四区五区高| 日韩精品免费在线视频观看| 另类少妇人与禽zozz0性伦| 欧美精品久久久久久久久| 亚洲欧洲在线看| 中文字幕亚洲精品| 亚洲国产精品国自产拍av秋霞| 这里只有精品在线观看| 狠狠躁夜夜躁人人爽超碰91| 91sa在线看| 欧美精品免费在线观看| 97久久精品在线| 国产噜噜噜噜噜久久久久久久久| 国产精品免费一区二区三区都可以| 久热国产精品视频| 久久人人97超碰精品888| 色偷偷偷亚洲综合网另类| 成人久久精品视频| 欧美韩国理论所午夜片917电影| 国产欧美婷婷中文| 国产亚洲美女精品久久久| 51午夜精品视频| 欧美精品日韩三级| 97精品国产97久久久久久春色| 青青草国产精品一区二区| 亚洲bt欧美bt日本bt| 性欧美亚洲xxxx乳在线观看| 国产欧美欧洲在线观看| 国产精品久久久久久五月尺| 97免费中文视频在线观看| 欧美日韩亚洲视频|