回调函数有这样一种定义:
1.回调就是该函数写在高层,低层通过一个函数指针来保存这个函数,在某个事件触发下,低层通过该函数指针调用高层那个函数(c语言);
2.在java中,通常是编写另外一个类或者类库的人规定一个接口,然后你来实现这个接口,然后把这个接口作为参数传递给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。
这是别人定义的一个接口,下面是你对接口的实现:
然后是一个工具类的实现:
在tools中,接口的对象callBack作为参数传递给了testTime()方法,通过接口的回调,调用了之前编写的testMethod()方法。
输出:
回调函数还有个特征:不是我来调用你,而是你来调用我。
这里的我就是“testTime”,你就是"execute"。
1.回调就是该函数写在高层,低层通过一个函数指针来保存这个函数,在某个事件触发下,低层通过该函数指针调用高层那个函数(c语言);
2.在java中,通常是编写另外一个类或者类库的人规定一个接口,然后你来实现这个接口,然后把这个接口作为参数传递给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。
public interface CallBack {
public void execute();
}
这是别人定义的一个接口,下面是你对接口的实现:
public class TestObject {
/**
* 一个用来被测试的方法,进行了一个比较耗时的循环
*/
public static void testMethod() {
for (int i = 0; i < 100000000; i++) {
}
System.out.println("回调中···");
}
}
然后是一个工具类的实现:
public class Tools {
/**
* 测试函数使用时间,通过定义CallBack接口的execute方法
*
* @param callBack
*/
public void testTime(CallBack callBack) {
System.out.println("回调前···");
long begin = System.currentTimeMillis();// 测试起始时间
callBack.execute();// /进行回调操作
long end = System.currentTimeMillis();// 测试结束时间
System.out.println("[use time]:" + (end - begin));// 打印使用时间
System.out.println("回调后···");
}
public static void main(String[] args) {
Tools tool = new Tools();
tool.testTime(new CallBack() {
// 定义execute方法
public void execute() {
// 这里可以加放一个或多个要测试运行时间的方法
TestObject.testMethod();
}
});
}
}
在tools中,接口的对象callBack作为参数传递给了testTime()方法,通过接口的回调,调用了之前编写的testMethod()方法。
输出:
回调前···
回调中···
[use time]:94
回调后···
回调函数还有个特征:不是我来调用你,而是你来调用我。
这里的我就是“testTime”,你就是"execute"。