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()方法就能够实现回调功能