• 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回调函数来实现一个測试函数执行时间的工具类:


    假设我们要測试一个类的方法的运行时间。通常我们会这样做:

    java 代码
     
    1. public   class  TestObject {  
    2.     /**  
    3.      * 一个用来被測试的方法。进行了一个比較耗时的循环  
    4.      */   
    5.     public   static   void  testMethod(){  
    6.         for ( int  i= 0 ; i< 100000000 ; i++){  
    7.               
    8.         }  
    9.     }  
    10.     /**  
    11.      * 一个简单的測试方法运行时间的方法  
    12.      */   
    13.     public   void  testTime(){  
    14.         long  begin = System.currentTimeMillis(); //測试起始时间   
    15.         testMethod(); //測试方法   
    16.         long  end = System.currentTimeMillis(); //測试结束时间   
    17.         System.out.println("[use time]:"  + (end - begin)); //打印使用时间   
    18.     }  
    19.       
    20.     public   static   void  main(String[] args) {  
    21.         TestObject test=new  TestObject();  
    22.         test.testTime();  
    23.     }  
    24. }  


    大家看到了testTime()方法,就仅仅有testMethod()"//測试方法"是须要改变的,以下我们来做一个函数实现同样功能但更灵活:

    首先定一个回调接口:

    java 代码
     
    1. public   interface  CallBack {  
    2.     //运行回调操作的方法   
    3.     void  execute();  
    4. }  


    然后再写一个工具类:

    java 代码
     
    1. public   class  Tools {  
    2.       
    3.     /**  
    4.      * 測试函数使用时间,通过定义CallBack接口的execute方法  
    5.      * @param callBack  
    6.      */   
    7.     public   void  testTime(CallBack callBack) {  
    8.         long  begin = System.currentTimeMillis(); //測试起始时间   
    9.         callBack.execute(); ///进行回调操作   
    10.         long  end = System.currentTimeMillis(); //測试结束时间   
    11.         System.out.println("[use time]:"  + (end - begin)); //打印使用时间   
    12.     }  
    13.       
    14.     public   static   void  main(String[] args) {  
    15.         Tools tool = new  Tools();  
    16.         tool.testTime(new  CallBack(){  
    17.             //定义execute方法   
    18.             public   void  execute(){  
    19.                 //这里能够加放一个或多个要測试执行时间的方法   
    20.                 TestObject.testMethod();  
    21.             }  
    22.         });  
    23.     }  
    24.       
    25. }  


    大家看到,testTime()传入定义callback接口的execute()方法就能够实现回调功能


  • 相关阅读:
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    C语言博客作业05--指针
    C语言博客作业04--数组
    DS博客作业08--课程总结
    DS博客作业07--查找
    06--图
    博客作业05--树
    DS博客作业01--日期抽象数据类型设计与实现
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7258852.html
Copyright © 2020-2023  润新知