最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的functor實(shí)現(xiàn)

 更新時(shí)間:2006年12月23日 00:00:00   作者:  
文章來(lái)源:csdn 作者:wangfengsdu

  經(jīng)常聽(tīng)到回調(diào)函數(shù)(callback function)這個(gè)概念, 所謂回調(diào)函數(shù),就是指這個(gè)函數(shù)先在某處注冊(cè),而它將在稍后某個(gè)需要的時(shí)候被調(diào)用。比如在利用SDK 進(jìn)行Windows編程的時(shí)候,我們需要注冊(cè)一個(gè)WNDCLASS類(lèi),這個(gè)類(lèi)中有這樣一個(gè)參數(shù) lpfnWndProc, 要進(jìn)行消息處理,我們就要用處理消息的函數(shù)的指針給它賦值。消息處理函數(shù)什么時(shí)候被調(diào)用的?我們沒(méi)有顯式地在程序中看到啊。是OS調(diào)用的。  這是SDK的試驗(yàn)方式,當(dāng)然用的是過(guò)程式的語(yǔ)言C,可以通過(guò)傳遞函數(shù)的指針實(shí)現(xiàn)。

   C++中怎么來(lái)實(shí)現(xiàn)呢?當(dāng)然,C++兼容C,用函數(shù)指針就可以。  同時(shí)C++又提供了面向?qū)ο蟮臋C(jī)制,可不可以有不同的實(shí)現(xiàn)機(jī)制呢?  當(dāng)然! STL 中的functor(Function object)就可以用到回調(diào)上。  比如對(duì)一個(gè)存放int數(shù)據(jù)的vector進(jìn)行遞減排序的話,我們可以這樣進(jìn)行。

  sort(vec.begin(),vec.end(),greater<int>());
   greater<int>()
  
   就是我們傳遞的一個(gè)匿名對(duì)象,它重載了函數(shù)調(diào)用運(yùn)算符“()”。我們沒(méi)有顯式地調(diào)用這個(gè)對(duì)象里面提供的函數(shù),sort函數(shù)對(duì)對(duì)象里面的函數(shù)進(jìn)行call back。

  Java中要實(shí)現(xiàn)類(lèi)似functor的功能,應(yīng)該怎么辦呢?Command模式可以幫上忙。Command模式看起來(lái)很簡(jiǎn)單,只要把command封裝到一個(gè)接口中就可以。Command模式是回調(diào)機(jī)制的一個(gè)面向?qū)ο蟮奶娲贰?/p>

  比如 java.io 中已經(jīng)定義好的一個(gè)接口

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

  這個(gè)FilenameFilter就是Command,實(shí)現(xiàn)Command的類(lèi)就是ConcreteCommand。這個(gè)接口所聲明的操作 "accept" 就是看看目錄dir中的文件name是否滿(mǎn)足某種要求,如果滿(mǎn)足就返回true,否則就返回false。這個(gè)要求是什么呢?你要對(duì)這個(gè)接口進(jìn)行實(shí)現(xiàn)。比如我想看看這個(gè)文件的名稱(chēng)包含不包含指定的字符串,那么就可以定義下面的類(lèi):
   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類(lèi)中有這樣一個(gè)方法
      public String[] list(FilenameFilter filter)

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

  得到的list就是一個(gè)當(dāng)然目錄中所有包含字符串"wf"的文件名稱(chēng)的字符串?dāng)?shù)組。怎么樣,看起來(lái)是不是和C++中的functor差不多呢?

相關(guān)文章

  • Springboot整合企業(yè)微信機(jī)器人助手推送消息的實(shí)現(xiàn)

    Springboot整合企業(yè)微信機(jī)器人助手推送消息的實(shí)現(xiàn)

    本文主要介紹了Springboot整合企業(yè)微信機(jī)器人助手推送消息的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Spring Cloud Feign組件實(shí)例解析

    Spring Cloud Feign組件實(shí)例解析

    這篇文章主要介紹了Spring Cloud Feign組件實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • mybatis中批量插入的兩種方式(高效插入)

    mybatis中批量插入的兩種方式(高效插入)

    MyBatis是一個(gè)支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了mybatis中批量插入的兩種方式(高效插入)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-09-09
  • 一文帶你吃透Java中的String類(lèi)

    一文帶你吃透Java中的String類(lèi)

    在 Java 中,字符串是一種常見(jiàn)的數(shù)據(jù)類(lèi)型,經(jīng)常用于存儲(chǔ)一些文本信息,而String類(lèi)則是Java提供的專(zhuān)門(mén)用于字符串操作的類(lèi),本文就來(lái)和大家聊聊String類(lèi)的常用方法與實(shí)現(xiàn)原理吧
    2023-05-05
  • 用Maven打成可執(zhí)行jar,包含maven依賴(lài),本地依賴(lài)的操作

    用Maven打成可執(zhí)行jar,包含maven依賴(lài),本地依賴(lài)的操作

    這篇文章主要介紹了用Maven打成可執(zhí)行jar,包含maven依賴(lài),本地依賴(lài)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 在java代碼中獲取JVM參數(shù)的方法

    在java代碼中獲取JVM參數(shù)的方法

    下面小編就為大家?guī)?lái)一篇在java代碼中獲取JVM參數(shù)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫(xiě)法

    MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫(xiě)法

    這篇文章主要介紹了MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java使用JXLS導(dǎo)出Excel詳解

    Java使用JXLS導(dǎo)出Excel詳解

    jxls是一個(gè)輕量級(jí)的Java庫(kù),用于基于模板的Excel報(bào)表生成,這篇文章主要為大家介紹了Java如何使用JXLS導(dǎo)出Excel,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • 關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    這篇文章主要介紹了關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • springboot使用RedisRepository操作數(shù)據(jù)的實(shí)現(xiàn)

    springboot使用RedisRepository操作數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了springboot使用RedisRepository操作數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論

屯留县| 六盘水市| 沾益县| 怀仁县| 报价| 尉氏县| 平远县| 乐都县| 娄底市| 文成县| 霞浦县| 鲁甸县| 衡南县| 万山特区| 沙洋县| 印江| 赞皇县| 厦门市| 兰考县| 房山区| 土默特左旗| 建阳市| 西平县| 江门市| 昭苏县| 什邡市| 巴中市| 楚雄市| 开封市| 西和县| 喀什市| 绍兴市| 阜南县| 黄山市| 宣武区| 靖边县| 麻江县| 郸城县| 阳曲县| 广汉市| 金门县|