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()方法就可以实现回调功能
Java中的回调函数学习-深入浅出,布布扣,bubuko.com
Java中的回调函数学习-深入浅出
原文:http://blog.csdn.net/fngy123/article/details/37820143