一般来说分为以下几步:
  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排序的compare接口

  1. interface Compare {
  2.    boolean lessThan(Object lhs, Object rhs);
  3.    boolean lessThanOrEqual(Object lhs, Object rhs);
  4.   }
  5. import java.util.*;
  6.   
  7.   public class SortVector extends Vector {
  8.    private Compare compare; // 私有接口成员
  9.    public SortVector(Compare comp) {
  10.        compare = comp;
  11.    }
  12.    public void sort() {
  13.        quickSort(0, size() - 1);
  14.    }
  15.    private void quickSort(int left, int right) {
  16.        if(right > left) {
  17.       Object o1 = elementAt(right);
  18.       int i = left - 1;
  19.       int j = right;
  20.       while(true) {
  21.            while(compare.lessThan(
  22.              elementAt(++i), o1))
  23. ;
  24.            while(j > 0)
  25.              if(compare.lessThanOrEqual(
  26.                   elementAt(--j), o1))
  27.                      break;
  28.               if(i >= j) break;
  29.                   swap(i, j);
  30.        }
  31.       swap(i , right);
  32.       quickSort(left, i-1);
  33.       quickSort(i+1, right);
  34.        }
  35.     }
  36.     private void swap(int loc1, int loc2) {
  37.        Object tmp = elementAt(loc1);
  38.        setElementAt(elementAt(loc2), loc1);
  39.        setElementAt(tmp, loc2);
  40.    }
  41.   }

Java中的回调函数学习的更多相关文章

  1. Java中的回调函数学习-深入浅出

    Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...

  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. 无法识别的配置节 system.serviceModel

    也是从网上四处搜来的答案,的确是解决了问题 不知道是不是补丁更新的原因,之前运行好的程序,突然就不行了, 一开始,运行直接就闪退了,在事件查看器里,也看不到具体的错误信息,幸亏是cmd的程序,所以 , ...

  2. WIN7 64位 IE10打开WEB管理提示证书不安全

    用IE10只要在CMD里运行 certutil -setreg chain\minRSAPubKeyBitLength 512 就好了

  3. 第四十五节,logging日志模块

    用于便捷记录日志且线程安全的模块 单文件日志 basicConfig()模块函数 功能:创建日志文件和写日志模式[有参] 使用方法:模块名称.basicConfig(filename="日志 ...

  4. 交互式shell和非交互式shell的区别

    交互式模式就是shell等待你的输入,并且执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.签退.当你签退后,shell也终止 ...

  5. OpenCV ——双线性插值(Bilinear interpolation)

    1,原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度 ...

  6. [tableView dequeueReusableCellWithIdentifier:CellIdentifier] 后面forIndexPath:indexPath参数的解释

    解决以下错误: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'u ...

  7. sqlserver内存释放

    由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),  Sql Server才会释放一点点内存.所以很多时候,我们会发现运行Sql Serv ...

  8. HDU2050 由直线分割平面推广到折线分割平面

    直线分割平面问题: 加入已有n-1条直线,那么再增加一条直线,最多增加多少个平面? 为了使增加的平面尽可能的多,我们应该使新增加的直线与前n条直线相交,且不存在公共交点.那么我们可以将新增加的这条直线 ...

  9. [Python]网络爬虫(四):Opener与Handler的介绍和实例应用

    在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info() ...

  10. hiho#1128 : 二分·二分查找

    input 1<=n<=1e6 1<=k<=2*1e9 a1 a2 ... an 1<=an<=2*1e9 output k存在则输出k是第几大的数,否则输出-1 ...