分享

Java中的回调函数学习

 大头祥子 2014-01-17
     一般来说分为以下几步:
  1. 声明回调函数的统一接口interface A,包含方法callback();
  2. 在调用类caller内将该接口设置为私有成员private A XXX;
  3. 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形参传入caller的XXX);
  4. caller的某个方法dosth()中会用到XXX.callback()方法;
  5. 在caller的实例中,先实现A接口,后调用dosth()方法;

网上流行的例子:
Java代码  收藏代码
  1. //回调函数接口及方法  
  2. public interface ICallback {   
  3.   public void   func();    
  4. }  
  5. //回调函数接口实现类  
  6. public class ClassWithCallbackFunction implements ICallback{  
  7.   public ClassWithCallbackFunction() {  
  8.   }  
  9.   public void func(){  
  10.     System.out.println("cccccccccccccccccc");  
  11.   }  
  12. }      
  13. public class Caller {  
  14.   private ICallback callback;  //私有接口成员        
  15.   public void setCallback(ICallback callback) {  
  16.     this.callback = callback;  //接口成员的实现:从外部传入  
  17.   }   
  18.   public void doCallback() {   //回调接口成员的方法  
  19.     callback.func();  
  20.   }  
  21.  }  
  22. }  
  23. public class MainClass {  
  24.   public MainClass() {  
  25.   }  
  26.   public static void main(String[] args) {  
  27.     Caller caller = new Caller();  
  28.     caller.setCallback(new ClassWithCallbackFunction() {  
  29.       public void func() {  
  30.         System.out.println("aaaaaaaaaa");  
  31.       }  
  32.     });  
  33.     caller.doCallback();      //实现回调  
  34.   }  
  35. }    
  36. //现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理  
  37. public class Caller {  
  38.   ICallback callback;  
  39.   public void doCallback() {  
  40.     callback.func();  
  41.   }  
  42.   public void setCallback(ICallback callback) {  
  43.     this.callback = callback;  
  44.     doCallback();  
  45.   }  
  46. }  


另一个例子是JAVA排序的compare接口

Java代码  收藏代码
  1. interface Compare {  
  2.    boolean lessThan(Object lhs, Object rhs);  
  3.    boolean lessThanOrEqual(Object lhs, Object rhs);  
  4.   }  
  5.   
  6. import java.util.*;  
  7.     
  8.   public class SortVector extends Vector {  
  9.    private Compare compare; // 私有接口成员  
  10.    public SortVector(Compare comp) {  
  11.        compare = comp;  
  12.    }  
  13.    public void sort() {  
  14.        quickSort(0, size() - 1);  
  15.    }  
  16.    private void quickSort(int left, int right) {  
  17.        if(right > left) {  
  18.       Object o1 = elementAt(right);  
  19.       int i = left - 1;  
  20.       int j = right;  
  21.       while(true) {  
  22.            while(compare.lessThan(  
  23.              elementAt(++i), o1))  
  24.                       ;  
  25.            while(j > 0)  
  26.              if(compare.lessThanOrEqual(  
  27.                   elementAt(--j), o1))  
  28.                      break;   
  29.               if(i >= j) break;  
  30.                   swap(i, j);  
  31.        }  
  32.       swap(i , right);  
  33.       quickSort(left, i-1);  
  34.       quickSort(i+1, right);  
  35.        }  
  36.     }  
  37.     private void swap(int loc1, int loc2) {  
  38.        Object tmp = elementAt(loc1);  
  39.        setElementAt(elementAt(loc2), loc1);  
  40.        setElementAt(tmp, loc2);  
  41.    }  
  42.   }   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多