下面使用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()方法,就只有"//测试方法"是需要改变的,下面我们来做一个函数实现相同功能但更灵活:
首先定一个回调接口:
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()方法就可以实现回调功能