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. 汕头市队赛 SRM 08 A

    比赛没参加 所以回来补题咯 A还是自己YY出来了的 可惜比赛没有打 描述 给一个 01 串设为其 S,询问是否存在只出现两次的 01 串 T. 这里的出现定义为存在一串下标 ,满足  且 . 输入格式 ...

  2. wxpython demo

    #!/usr/bin/python # encoding: utf-8 '''Spare.py is a starting point for a wxPython program.''' impor ...

  3. Xen虚拟化技术中PV和HVM的区别

    转自 这里 Xen是一个开源的type-1或者裸机管理程序,它使得一个物理主机能够同时并行运行多个相同的或者不同的操作系统实例.Xen是目前唯一的开源可得的type-1管理程序.Xen被应用于许多商业 ...

  4. Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: /tmp/hsperfdata_hadoop/44512

    早上登录hbase shell,出现异常: [hadoop@node002 ~]$ hbase shell Java HotSpot(TM) 64-Bit Server VM warning: Ins ...

  5. jdbc连接警告不安全

    Mon Jun 11 10:46:26 CST 2018 WARN: Establishing SSL connection without server's identity verificatio ...

  6. JAVA向EXE文件尾追加配置信息,用于解决局版客户端的程序IP配置问题

    package com.demo.blog; import java.io.DataOutputStream;import java.io.File;import java.io.FileOutput ...

  7. Good Bye 2016 A. New Year and Hurry【贪心/做题目每道题花费时间按步长为5等差增长,求剩余时间够做几道题】

    A. New Year and Hurry time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. php的一些语法

    命名空间: 一个类为App/Http/Controllers/Controller,则该类的命名空间为App/Http/Controllers,可以通过use关键字导入该类,也可以导入命名空间,但是该 ...

  9. 四. Java继承和多态9. 类与类之间的关系

    类与类之间最常见的关系主要有三种:依赖(uses-a).聚合(has-a)和继承(is-a). 下面以在线书店订单系统为例,来详细的讲述这三种关系的概念. 在线书店订单系统的主要功能是:注册用户可以登 ...

  10. linux-查找命令-find

    1. 按文件名(目录)查找.(*代表模糊匹配) find / -name curl    在根目录查找名字是curl的文件名(目录) find / -name "*curl*"   ...