一般来说分为以下几步:
  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. apt-get 依赖修复

    apt-get cleanapt-get update apt-get -f install dpkg --configure -a

  2. EntityFramework日志记录

    首先在应用启动时执行:DbInterception.Add(new LogFormatter());   然后加入如下类: #region [ EF的数据库执行日志记录 ] public class ...

  3. APUE读书笔记:进程控制

    重点函数:fork,exit,_exit 一.fork 函数原型: #include <unistd.> pid_t fork(void) 函数说明:fork函数将创建一个子进程,该函数调 ...

  4. mysql日志详细解析【转载】

    转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...

  5. linux下如何开放80端口

    linux清屏命令:clear linux版本:CentOS6.5 1.开启80端口命令:/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT2.保存 ...

  6. Inno Setup入门(十)——操作注册表

    有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过在安装程序中对注册表进行操作的结果.Inno Setup中通过[registry]段实现对注册表的操作. 本段说明: 参数列表: 参 ...

  7. Sublime console installation instructions install Package Control

    instructions: import urllib2,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1 ...

  8. 转 当当网资深DBA:DB运维四大现代化的实现

    位好,今天我的主题是 <DB运维的四个现代化> ,看标题就能明白,是关于DBA自动化运维平台的事情.http://dbaplus.cn/news-21-855-1.html 主要是分享下我 ...

  9. linux 命令汇总

    一 Grep 命令 各种参数: -i:ignore-case忽略大小写 -c :打印匹配的行数 -l :从多个文件中查找包含匹配项 -v :查找不包含匹配项的行 -n :打印包含匹配项的行和行标 -w ...

  10. CI 路由设置

    $route['news/show/(:num)']='news/show/$1';   前边是匹配 网址   后边是  指定控制器 在application/config/文件夹下有routes.p ...