Java中的回调函数一般来说分为下面几步:

  1. 声明回调函数的统一接口interface A。包括方法callback();
  2. 在调用类caller内将该接口设置为私有成员private A XXX;
  3. 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形參传入caller的XXX);
  4. caller的某个方法dosth()中会用到XXX.callback()方法;
  5. 在caller的实例中,先实现A接口。后调用dosth()方法;

样例:

  1. //回调函数接口及方法
  2. public interface ICallback {
  3. public void   func();
  4. }
  5. //回调函数接口实现类
  6. public class ClassWithCallbackFunction implements ICallback{
  7. public ClassWithCallbackFunction() {
  8. }
  9. public void func(){
  10. System.out.println("cccccccccccccccccc");
  11. }
  12. }
  13. public class Caller {
  14. private ICallback callback;  //私有接口成员
  15. public void setCallback(ICallback callback) {
  16. this.callback = callback;  //接口成员的实现:从外部传入
  17. }
  18. public void doCallback() {   //回调接口成员的方法
  19. callback.func();
  20. }
  21. }
  22. }
  23. public class MainClass {
  24. public MainClass() {
  25. }
  26. public static void main(String[] args) {
  27. Caller caller = new Caller();
  28. caller.setCallback(new ClassWithCallbackFunction() {
  29. public void func() {
  30. System.out.println("aaaaaaaaaa");
  31. }
  32. });
  33. caller.doCallback();      //实现回调
  34. }
  35. }
  36. //现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理
  37. public class Caller {
  38. ICallback callback;
  39. public void doCallback() {
  40. callback.func();
  41. }
  42. public void setCallback(ICallback callback) {
  43. this.callback = callback;
  44. doCallback();
  45. }
  46. }
以下再使用java回调函数来实现一个測试函数执行时间的工具类:

假设我们要測试一个类的方法的运行时间。通常我们会这样做:

java 代码
  1. public   class  TestObject {
  2. /**
  3. * 一个用来被測试的方法。进行了一个比較耗时的循环
  4. */
  5. public   static   void  testMethod(){
  6. ; i< 100000000 ; i++){
  7. }
  8. }
  9. /**
  10. * 一个简单的測试方法运行时间的方法
  11. */
  12. public   void  testTime(){
  13. long  begin = System.currentTimeMillis(); //測试起始时间
  14. testMethod(); //測试方法
  15. long  end = System.currentTimeMillis(); //測试结束时间
  16. System.out.println("[use time]:"  + (end - begin)); //打印使用时间
  17. }
  18. public   static   void  main(String[] args) {
  19. TestObject test=new  TestObject();
  20. test.testTime();
  21. }
  22. }

大家看到了testTime()方法,就仅仅有testMethod()"//測试方法"是须要改变的,以下我们来做一个函数实现同样功能但更灵活:



首先定一个回调接口:

java 代码
  1. public   interface  CallBack {
  2. //运行回调操作的方法
  3. void  execute();
  4. }

然后再写一个工具类:

java 代码
  1. public   class  Tools {
  2. /**
  3. * 測试函数使用时间,通过定义CallBack接口的execute方法
  4. * @param callBack
  5. */
  6. public   void  testTime(CallBack callBack) {
  7. long  begin = System.currentTimeMillis(); //測试起始时间
  8. callBack.execute(); ///进行回调操作
  9. long  end = System.currentTimeMillis(); //測试结束时间
  10. System.out.println("[use time]:"  + (end - begin)); //打印使用时间
  11. }
  12. public   static   void  main(String[] args) {
  13. Tools tool = new  Tools();
  14. tool.testTime(new  CallBack(){
  15. //定义execute方法
  16. public   void  execute(){
  17. //这里能够加放一个或多个要測试执行时间的方法
  18. TestObject.testMethod();
  19. }
  20. });
  21. }
  22. }

大家看到,testTime()传入定义callback接口的execute()方法就能够实现回调功能

Java中的回调函数学习-深入浅出的更多相关文章

  1. Java中的回调函数学习

    Java中的回调函数学习 博客分类: J2SE JavaJ#  一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...

  2. Java中的回调函数

    本例拿apache commons dbutils举例 回调函数: 回调是指在执行时,具体的封装处理工用由第三方的类来实现. 回调一般由两部分组成 1:调用类 - QueryRunner.实例类 2: ...

  3. java与安卓中的回调callback学习笔记

    1.回调的简单设计如下: package com.listercai.top; public class A { private CallBack callBack; private AnotherC ...

  4. 理解和使用 JavaScript 中的回调函数

    理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报  分类: JavaScript(4)    目录( ...

  5. Java中的回调

    又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了). 这次我们来谈一谈Java里的一个很有意思的东西--回调. 什么叫回调,一本正经的来讲,在计算机程序设计中,回调函数是指通过 ...

  6. 【Java入门提高篇】Day4 Java中的回调

    又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了). 这次我们来谈一谈Java里的一个很有意思的东西——回调. 什么叫回调,一本正经的来讲,在计算机程序设计中,回调函数是指通过 ...

  7. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  8. JavaScript 中的回调函数

    原文:http://javascriptissexy.com/ 翻译:http://blog.csdn.net/luoweifu/article/details/41466537 [建议阅读原文,以下 ...

  9. 聊一聊 Vue 中 watch 对象中的回调函数为什么不能是箭头函数?

    聊一聊 Vue 中 watch 对象中的回调函数为什么不能是箭头函数 本文重点知识点速览: Vue 中的 watch 对象中的回调函数不能是箭头函数. 箭头函数中的 this 指向的是函数定义时所在的 ...

随机推荐

  1. 洛谷 P1343 地震逃生

    P1343地震逃生 题目描述 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带,每 ...

  2. Gradle for Android(三)多渠道打包、配置签名信息

    多渠道打包 国内有太多Android App市场,每次发版几十个渠道包.还好Android Gradle给我们提供了productFlavors,我们可以对生成的APK包进行定制. productFl ...

  3. Extend Html.EditorFor MVC

    原文发布时间为:2011-09-07 -- 来源于本人的百度文章 [由搬家工具导入] http://aspadvice.com/blogs/kiran/archive/2009/11/29/Addin ...

  4. [ CodeVS冲杯之路 ] P3143

     不充钱,你怎么AC? 题目:http://codevs.cn/problem/3143/ 大水题一道,只要会遍历,这里讲一下思路 先序遍历:先输出,然后左儿子,最后右儿子 中序遍历:先左儿子,再输出 ...

  5. grep and regular expression --- ^ . *

    "^" : Start of Line anchor "." : Matches any single character except the newline ...

  6. js正则常用的一些东西

    mdn的正则文档 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions js正则表达式的分 ...

  7. UVA 1025 A Spy in the Metro 【DAG上DP/逆推/三维标记数组+二维状态数组】

    Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After s ...

  8. HDU1016 Prime Ring Problem (回溯 + 剪枝)

    本文链接:http://www.cnblogs.com/Ash-ly/p/5398684.html 题意: 给你一个数字N(N <= 20),要求你把这N个数组成一个环,环内的数字不能重复,左右 ...

  9. Python的程序结构[2] -> 类/Class[2] -> 方法解析顺序 MRO

    方法解析顺序 / MRO (Method Resolution Order) 关于方法解析顺序(MRO)的详细内容可以参考文末链接,这里主要对 MRO 进行简要的总结说明以及一些练习示例. 经典类和新 ...

  10. 关于Android攻击面

    先对android整个攻击面有一个体系化的认识,有助于理清思路, 对今后的学习有很大的帮助. 什么是攻击向量:从语言语法的角度来说,是一个动词,描述用来执行攻击的方法,描述了攻击者如何到达并接触任意给 ...