国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中的functor實現(xiàn)

2019-11-17 06:10:46
字體:
來源:轉載
供稿:網友

  經常聽到回調函數(callback function)這個概念, 所謂回調函數,就是指這個函數先在某處注冊,而它將在稍后某個需要的時候被調用。

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

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

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

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

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

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

  這個FilenameFilter就是Command,實現(xiàn)Command的類就是ConcreteCommand。這個接口所聲明的操作 "accept" 就是看看目錄dir中的文件name是否滿足某種要求,假如滿足就返回true,否則就返回false。這個要求是什么呢?你要對這個接口進行實現(xiàn)。

比如我想看看這個文件的名稱包含不包含指定的字符串,那么就可以定義下面的類:
  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"));



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 扶绥县| 沁源县| 仙居县| 晴隆县| 临猗县| 枣庄市| 龙口市| 麻城市| 济源市| 福清市| 呼图壁县| 拜泉县| 井陉县| 永州市| 桃园县| 樟树市| 陆良县| 定边县| 花莲县| 潜山县| 安泽县| 英山县| 西城区| 大方县| 成武县| 二连浩特市| 若羌县| 手游| 民县| 聂拉木县| 新郑市| 远安县| 广灵县| 铜鼓县| 庐江县| 勃利县| 大关县| 融水| 启东市| 黎平县| 阿荣旗|