一般来说分为以下几步:
  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. Windows进程间通信(上)

    一.管道 管道(pipe)是用于进程间通信的共享内存区域.创建管道的进程称为管道服务器,而连接到这个管道的进程称为管道客户端.一个进程向管道写入信息,而另外一个进程从管道读取信息. 异步管道是基于字符 ...

  2. Android测试日志文件抓取与分析

    1.log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb shel ...

  3. 2012-11-17 12:28 用MFC实现的计算器(详细版)

    这篇文章里通过计算器的简单实现,让大家能够了解一般对话框应用程序开发的基本流程 要求:编写简单的计算器应用程序,要求利用按钮进行加.减.乘,除操作,在对话框输出计算机结果. 下面结合操作步骤,讲解对话 ...

  4. Chapter 1 First Sight——35

    The final bell rang at last. I walked slowly to the office to return my paperwork. 最后下课铃响了.我走到了办公室上讲 ...

  5. web app 基础界面框架搭建

    一.问题的产生 基础框架界面如图1所示,目前app流行布局 图1 布局关注点: 1.Title和Footer部分为固定布局position:fixed,存在的争议是android2.x和IOS4一下说 ...

  6. JavaScript 错误 - Throw、Try 和 Catch

    http://www.w3school.com.cn/js/js_errors.asp try 语句测试代码块的错误.catch 语句处理错误.throw 语句创建自定义错误. 错误一定会发生 当 J ...

  7. 通过纯Java代码从excle中读取数据(为.xlsx文件)

    参考链接: 程序代码: package demo; import java.io.File; import java.io.IOException; import java.io.InputStrea ...

  8. java FLOAT

    System.out.println(""+ 1/2); 得不到0.5,只能得到0. 要想打印出浮点数,必须除数和被除数至少有一个是浮点数,像这样: System.out.prin ...

  9. 谈CSS模块化【封装-继承-多态】

    第一次听到“CSS模块化”这个词是在WebReBuild的第四届“重构人生”年会上,当时我还想,“哈,CSS也有模块化,我没听错吧?”事实上,我没听错,你也没看错,早就有CSS模块化这个概念了.之所以 ...

  10. ios 控件 UIButton

    - (void)setTitle:(NSString *)title forState:(UIControlState)state; //设置标题 - (void)setTitleColor:(UIC ...