您现在的位置是:首页
>
gui回调函数调用 Java的回调函数
Java的回调函数 讲到回调函数这个概念给大家普及下 所谓回调函数 就是指这个函数先在某处注册 而它将在稍后某个需要的时候被调用 比如在利用SDK 进行Wi dow 编程的时候 我们需要注册一个WND

Java的回调函数
讲到回调函数这个概念给大家普及下 所谓回调函数 就是指这个函数先在某处注册 而它将在稍后某个需要的时候被调用 比如在利用SDK 进行Windows编程的时候 我们需要注册一个WNDCLASS类 这个类中有这样一个参数lpfnWndProc 要进行消息处理 我们就要用处理消息的函数的指针给它赋值 消息处理函数什么时候被调用的?我们没有显式地在程序中看到啊 是OS调用的 这是SDK的试验方式 当然用的是过程式的语言C 可以通过传递函数的指针实现 C++中怎么来实现呢?当然 C++兼容C 用函数指针就可以 同时C++又提供了面向对象的机制 可不可以有不同的实现机制呢?当然!STL 中的functor(Function object)就可以用到回调上 比如对一个存放int数据的vector进行递减排序的话 我们可以这样进行 sort(vec begin() vec end() greater<int>()) greater<int>() 就是我们传递的一个匿名对象 它重载了函数调用运算符 () 我们没有显式地调用这个对象里面提供的函数 sort函数对对象里面的函数进行call back Java中要实现类似functor的功能 应该怎么办呢?Command模式可以帮上忙 Command模式看起来很简单 只要把mand封装到一个接口中就可以 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) != ; } } 怎么样使用它呢?File类中有这样一个方法 public String[] list(FilenameFilter filter) 因此 我们就可以这样做了 File file = new File( ) String[] list = file list(new DirFilter( wf )) 得到的list就是一个当然目录中所有包含字符串 wf 的文件名称的字符串数组 怎么样 看起来是不是和C++中的functor差不多呢? lishixinzhi/Article/program/Java/hx/201311/26476 很赞哦! (1045)