日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中function实现_Java中的functor实现

發布時間:2024/4/13 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中function实现_Java中的functor实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章來源:csdn 作者:wangfengsdu

經常聽到回調函數(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差不多呢?

總結

以上是生活随笔為你收集整理的java中function实现_Java中的functor实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。