<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海闊天空

    I'm on my way!
    隨筆 - 17, 文章 - 69, 評論 - 21, 引用 - 0
    數據加載中……

    java中進行callback方法調用

    回調函數(callback function)這個概念, 所謂回調函數,就是指這個函數先在某處注冊,而它將在稍后某個需要的時候被調用。比如在利用SDK 進行Windows編程的時候,我們需要注冊一個WNDCLASS類,這個類中有這樣一個參數 lpfnWndProc, 要進行消息處理,我們就要用處理消息的函數的指針給它賦值。消息處理函數什么時候被調用的?我們沒有顯式地在程序中看到啊。是OS調用的。  這是SDK的試驗方式,當然用的是過程式的語言C,可以通過傳遞函數的指針實現。

    C++中怎么來實現呢?當然,C++兼容C,用函數指針就可以。  同時C++又提供了面向對象的機制,可不可以有不同的實現機制呢?  當然! STL 中的functor(Function object)就可以用到回調上。  比如對一個存放int數據的vector進行遞減排序的話,我們可以這樣進行。

        sort(vec.begin(),vec.end(),greater());

      greater()就是我們傳遞的一個匿名對象,它重載了函數調用運算符“()”。我們沒有顯式地調用這個對象里面提供的函數,sort函數對對象里面的函數進行call back。

      Java中要實現類似functor的功能,應該怎么辦呢?Command模式可以幫上忙。Command模式看起來很簡單,只要把command封裝到一個接口中就可以。Command模式是回調機制的一個面向對象的替代品。

      比如 java.io 中已經定義好的一個接口

        public interface FilenameFilter {
            boolean accept(File dir, String name);
        }

      這個FilenameFilter就是Command,實現Command的類就是ConcreteCommand。這個接口所聲明的操作 “accept” 就是看看目錄dir中的文件name是否滿足某種要求,如果滿足就返回true,否則就返回false。這個要求是什么呢?你要對這個接口進行實現。比如 我想看看這個文件的名稱包含不包含指定
    的字符串,那么就可以定義下面的類:

        class DirFilter implements FilenameFilter {
            private String afn;
            public DirFilter(String afn){

       this.afn = afn;
            }  
            public boolean accept(File dir, String name){
                String f = new File(name).getName();
                return f.indexOf(afn) != -1;
            }
        }

     

      怎么樣使用它呢?File類中有這樣一個方法
        public String[] list(FilenameFilter filter)

      因此,我們就可以這樣做了:
        File file = new File(”.”);
        String[] list = file.list(new DirFilter(”wf”));

      得到的list就是一個當然目錄中所有包含字符串”wf”的文件名稱的字符串數組。

      怎么樣,看起來是不是和C++中的functor差不多呢?

     anonymous inner class    和  closure (7.0)都是體現回調的思想

    posted on 2009-08-21 21:43 石頭@ 閱讀(4033) 評論(0)  編輯  收藏 所屬分類: java_base

    主站蜘蛛池模板: 成年女人男人免费视频播放| 国产亚洲精品无码专区| 亚洲经典在线观看| 精品亚洲AV无码一区二区三区| 精品久久久久久亚洲中文字幕| 成人在线免费观看| 中文字幕在线日亚洲9| 中文字幕免费在线视频| 精品亚洲视频在线观看| 一区二区三区精品高清视频免费在线播放| 国产成人精品免费视频大全五级| 国产亚洲福利一区二区免费看| 亚洲视频免费在线播放| 亚洲美女高清一区二区三区 | 亚洲日韩中文字幕一区| 嫩草影院在线免费观看| 黄色大片免费网站| 国产福利在线免费| 亚洲AV永久无码精品| 人人爽人人爽人人片A免费| 日韩不卡免费视频| 亚洲AV无码成人精品区天堂| 91高清免费国产自产拍2021| 学生妹亚洲一区二区| 免费一级毛片在播放视频| 亚洲色中文字幕在线播放| 四虎最新永久免费视频| 亚洲精品高清久久| 国内精品99亚洲免费高清| 亚洲国产美国国产综合一区二区 | 91精品国产免费久久国语麻豆| 亚洲av无码专区在线| 亚洲国产精品视频| 69视频在线观看高清免费| 久久精品国产亚洲AV天海翼| 亚洲综合色自拍一区| 久久久久久国产精品免费免费| 亚洲国产成人精品无码一区二区| 国产精品久久香蕉免费播放| 国产婷婷成人久久Av免费高清| 亚洲精品无码mv在线观看网站|