欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Java培訓(xùn)簡述Java中的functor實現(xiàn)

2018-06-20 10:18:56 1226瀏覽

本篇文章扣丁學(xué)堂Java培訓(xùn)小編給大家分享一下Java中的functor實現(xiàn),文章中會有詳細(xì)的方法與代碼列出,喜歡Java開發(fā)技術(shù)的小伙伴可以隨著小編一起來了解下。


扣丁學(xué)堂Java培訓(xùn)簡述Java中的functor實現(xiàn)


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


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


sort(vec.begin(),vec.end(),greater<int>()); 
greater<int>()
 

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


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


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

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


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


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



以上就是扣丁學(xué)堂Java在線學(xué)習(xí)小編給大家分享的Java中的functor實現(xiàn),希望對小伙伴們有所幫助。想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢,扣丁學(xué)堂是專業(yè)的Java培訓(xùn)機(jī)構(gòu),不僅有專業(yè)的老師和與時俱進(jìn)的課程體系,還有大量的Java在線教程,想要學(xué)好Java開發(fā)的小伙伴快快行動吧??鄱W(xué)堂Java技術(shù)交流群:670348138。


扣丁學(xué)堂微信公眾號

【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】



查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>



標(biāo)簽: 扣丁學(xué)堂Java培訓(xùn) Java中的functor實現(xiàn) Java培訓(xùn) Java基礎(chǔ)教程 Java學(xué)習(xí)視頻 Java教學(xué)視頻 java入門教程 Java教程視頻 java在線學(xué)習(xí) java在線視頻 java在線教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部