Java中的回调函数一般来说分为下面几步:
- 声明回调函数的统一接口interface A。包括方法callback();
- 在调用类caller内将该接口设置为私有成员private A XXX;
- 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形參传入caller的XXX);
- caller的某个方法dosth()中会用到XXX.callback()方法;
- 在caller的实例中,先实现A接口。后调用dosth()方法;
样例:
- 
  
- 
public interface ICallback {   
- 
  public void   func();    
- 
}  
- 
  
- 
public class ClassWithCallbackFunction implements ICallback{  
- 
  public ClassWithCallbackFunction() {  
- 
  }  
- 
  public void func(){  
- 
    System.out.println("cccccccccccccccccc");  
- 
  }  
- 
}      
- 
public class Caller {  
- 
  private ICallback callback;    
- 
  public void setCallback(ICallback callback) {  
- 
    this.callback = callback;    
- 
  }   
- 
  public void doCallback() {     
- 
    callback.func();  
- 
  }  
- 
 }  
- 
}  
- 
public class MainClass {  
- 
  public MainClass() {  
- 
  }  
- 
  public static void main(String[] args) {  
- 
    Caller caller = new Caller();  
- 
    caller.setCallback(new ClassWithCallbackFunction() {  
- 
      public void func() {  
- 
        System.out.println("aaaaaaaaaa");  
- 
      }  
- 
    });  
- 
    caller.doCallback();        
- 
  }  
- 
}    
- 
  
- 
public class Caller {  
- 
  ICallback callback;  
- 
  public void doCallback() {  
- 
    callback.func();  
- 
  }  
- 
  public void setCallback(ICallback callback) {  
- 
    this.callback = callback;  
- 
    doCallback();  
- 
  }  
- 
}  
 
以下再使用java回调函数来实现一个測试函数执行时间的工具类:
假设我们要測试一个类的方法的运行时间。通常我们会这样做:
java 代码
 
- 
public   class  TestObject {  
- 
      
- 
  
- 
   
- 
    public   static   void  testMethod(){  
- 
        for ( int  i= 0 ; i< 100000000 ; i++){  
- 
              
- 
        }  
- 
    }  
- 
      
- 
  
- 
   
- 
    public   void  testTime(){  
- 
        long  begin = System.currentTimeMillis();    
- 
        testMethod();    
- 
        long  end = System.currentTimeMillis();    
- 
        System.out.println("[use time]:"  + (end - begin));    
- 
    }  
- 
      
- 
    public   static   void  main(String[] args) {  
- 
        TestObject test=new  TestObject();  
- 
        test.testTime();  
- 
    }  
- 
}  
 
大家看到了testTime()方法,就仅仅有testMethod()"//測试方法"是须要改变的,以下我们来做一个函数实现同样功能但更灵活:
首先定一个回调接口:
java 代码
 
- 
public   interface  CallBack {  
- 
       
- 
    void  execute();  
- 
}  
 
然后再写一个工具类:
java 代码
 
- 
public   class  Tools {  
- 
      
- 
      
- 
  
- 
  
- 
   
- 
    public   void  testTime(CallBack callBack) {  
- 
        long  begin = System.currentTimeMillis();    
- 
        callBack.execute();    
- 
        long  end = System.currentTimeMillis();    
- 
        System.out.println("[use time]:"  + (end - begin));    
- 
    }  
- 
      
- 
    public   static   void  main(String[] args) {  
- 
        Tools tool = new  Tools();  
- 
        tool.testTime(new  CallBack(){  
- 
               
- 
            public   void  execute(){  
- 
                   
- 
                TestObject.testMethod();  
- 
            }  
- 
        });  
- 
    }  
- 
      
- 
}  
 
大家看到,testTime()传入定义callback接口的execute()方法就能够实现回调功能