zoukankan      html  css  js  c++  java
  • Java中的回调函数学习

    一般来说分为以下几步:
    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.   }   
  • 相关阅读:
    MR中简单实现自定义的输入输出格式
    简单实现CombineFileInputFormat
    提高mapreduce性能的七点建议
    MR中使用sequnceFIle输入文件
    Hive中使用LZO
    JVM启动参数详解 (转)
    ubuntu12.04中shell脚本无法使用source的原因及解决方法
    hadoop 错误
    poj 3211 Washing Clothes
    hdu 3535 AreYouBusy
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4288413.html
Copyright © 2011-2022 走看看