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()方法;

样例:

  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. ; i< 100000000 ; i++){
  7. }
  8. }
  9. /**
  10. * 一个简单的測试方法运行时间的方法
  11. */
  12. public   void  testTime(){
  13. long  begin = System.currentTimeMillis(); //測试起始时间
  14. testMethod(); //測试方法
  15. long  end = System.currentTimeMillis(); //測试结束时间
  16. System.out.println("[use time]:"  + (end - begin)); //打印使用时间
  17. }
  18. public   static   void  main(String[] args) {
  19. TestObject test=new  TestObject();
  20. test.testTime();
  21. }
  22. }

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



首先定一个回调接口:

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

然后再写一个工具类:

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

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

上一篇:异步IO与回调


下一篇:<--------------------------构造方法------------------------------>