您现在的位置是:首页 >

gui回调函数调用 Java的回调函数

火烧 2021-09-18 04:19:48 1045
Java的回调函数 讲到回调函数这个概念给大家普及下 所谓回调函数 就是指这个函数先在某处注册 而它将在稍后某个需要的时候被调用 比如在利用SDK 进行Wi dow 编程的时候 我们需要注册一个WND
gui回调函数调用 Java的回调函数

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  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码