java基础-回调函数(callback)
java基础-回调函数(callback)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
在C和C++中有回调函数数一个显而易见的东西,但是在Java中它没有这个机制,只能我们手动实现。本篇博客就用Java实现一个简单的回调函数案例。
一.Java回调机制
1>.Class A 实现接口 CallBack callback;
2>.Class A 中包含一个lB的引用b;
3>.Class B 有一个参数为callback 的方法f(CallBack callback);
4>.Class A的对象a调用Class B方法f(CallBack callback),换句话说,就是A类调用B类的某个方法c;
5>.然后b就可以在f(CallBack callback)方法中调用A的方法,换句话说就是B类调用A类的某个方法d;
二.案例展示
1>.场景分析
马上快到周五了,小明想要跟他的女朋友一起去看电影,以下是他们的通话记录:
小明说:[亲爱的,周五有部电影要首映,我关注了好久,我们一起去看吧,从19:00~23:30都可以看,你啥时候下班呢?]
小红说:[啊~啊~好刺激呀,我在吃辣条呢,一会打给你]
小明说:[那我先忙手上的工作了!]
小红说:[下班我回家换套衣服,要不晚上10:30不见不散!]
2>.代码实现
CallBack.java 代码如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.hdfs; public interface CallBack {
/**
* 这是小红知道答案时要调用的函数告诉小明,也就是回调函数,这个接口我是可以自定义哟。
*/
public abstract void resolv(String result);
}
XiaoMing.java 文件内容如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.hdfs; /**
* 这是小明
* 实现了一个回调接口CallBack。
*/
public class XiaoMing implements CallBack {
/**
* 创建一个对小红对象的引用
*/
private XiaoHong xiaohong;
/**
* 小明的构造方法,持有对Xiaohong的引用
*/
public XiaoMing(XiaoHong xiaohong) {
this.xiaohong = xiaohong;
} public XiaoMing() { } /**
* 小明通过这个方法去问小红问题
*/
public void askQuestion(final String question) throws InterruptedException {
Thread ask = new Thread() {
@Override
public void run() {
try {
xiaohong.execute(XiaoMing.this, question);
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
ask.start();
// ask.join();
//小明问完问题挂掉电话就去忙工作上的事情了
work();
} public void work(){
String work = "小明说:[那我先忙手上的工作了!]";
System.out.println(work);
} /**
* 这是小红确定了看电影的具体时间,调用此方法告诉小明,就是所谓的小明的回调方法。
*/
public void resolv(String result) {
System.out.printf("小红说:[%s]\n",result);
}
}
XiaoHong.java 文件内容如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.hdfs; /**
* 这个就是小红
*/
public class XiaoHong {
/**
*小明问的问题
*/
public void execute(CallBack callBack ,String question) throws InterruptedException {
System.out.println(question);
//模拟小红办自己的事情需要很长时间
System.out.println("小红说:[啊~啊~好刺激呀,我在吃辣条呢,一会打给你]");
Thread.sleep(10000);
//小红办完自己的事情之后就想到了答案是“晚上加班,去不了啦,下次吧!”
String result = "下班我回家换套衣服,要不晚上10:30不见不散!";
/**
* 于是就打电话告诉小明,调用小明中的方法。
*/
callBack.resolv(result);
}
}
Demo.java 文件内容如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.hdfs; public class Demo {
public static void main(String[] args) throws InterruptedException {
XiaoHong xiaoHong = new XiaoHong();
XiaoMing xiaoMing = new XiaoMing(xiaoHong); String question = "小明说:[亲爱的,周五有部电影要首映,我关注了好久,我们一起去看吧,从19:00~23:30都可以看,你啥时候下班呢?]";
xiaoMing.askQuestion(question);
}
}
3>.小结
xiaoMing调用xiaoHong的execute方法,xiaoHong在execute方法中通过CallBack接口调用xiaoMing的resolve。
java基础-回调函数(callback)的更多相关文章
- js回调函数(callback)理解
Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...
- JS回调函数(callback)
在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({ url:"test.json", type: "GET" ...
- 理解javascript中的回调函数(callback)
以下内容来源于:http://www.jb51.net/article/54641.htm 最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs ...
- 解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)
由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- C++回调函数(callback)的使用
什么是回调函数(callback) 模块A有一个函数foo,他向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事 ...
- 回调函数callback使用例子
代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <tit ...
- java基础--常用函数总结
java基础--常用函数总结 2019-3-16-23:28:01-----云林原创 1.split()字符串分割函数 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.Math.flo ...
- [转]C++回调函数(callback)的使用
原文地址:http://blog.sina.com.cn/s/blog_6568e7880100p77y.html 什么是回调函数(callback) 模块A有一个函数foo,他向模块B传递fo ...
随机推荐
- java程序设计课程实验报告1
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:陈都 学号:20135328 成绩: 指导 ...
- 针对网站的UI分析
PM对项目所有功能的把握,特别是UI 最差的UI,体现了团队的组织架构.其次,体现了产品的内部结构.最好,体现了用户的自然需求. 对于几种浏览器分别进行UI分析, (1)360的界面如今看来比较大众化 ...
- 数据库:XML,解析Dom4J
package com.itheima.util; import java.io.FileOutputStream; import java.net.URL; import org.dom4j.Doc ...
- 关闭Centos5.5的写磁盘I/O功能
一个Linux文件默认有3个时间. atime:对此文件的访问时间. ctime:此文件inode发生变化的时间. mtime:此文件的修改时间. 如果有多个小文件(比如Web服务器的页面上有多个小图 ...
- HBase 架构与工作原理2 - HBase 组件
本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.HBase 组件概览 Master-Slave 模式: HBase 体系结构遵循传统的 master-slave 模式,由一 ...
- C++模板常用功能讲解
前言 泛型编程是C++继面向对象编程之后的又一个重点,是为了编写与具体类型无关的代码.而模板是泛型编程的基础.模板简单来理解,可以看作是用宏来实现的,事实上确实有人用宏来实现了模板类似的功能.模板,也 ...
- 计算机网络【8】—— Get和Post请求的区别
get参数通过url传递,post放在request body中. get请求在url中传递的参数是有长度限制的,而post没有. get比post更不安全,因为参数直接暴露在url中,所以不能用来传 ...
- linux下安装java jdk
第一步:查看java对应版本 yum search java 我自己装的是1.8版本的java包 第二步:装java包 yum install java-1.8.0-ope ...
- 关于nginx的一点记录
(1) 安装nginx官网下载:http://nginx.org下载适合Windows的安装包,是一个压缩包,直接解压就可以了. (2) 启动nginx有三种方式启动:a. 双击nginx.exe图标 ...
- win10与Ubantu双系统:Linux下开启FTP服务器与创建无线热点(实现文件共享)
如何在win系统下使用filelizza这个软件搭建FTP服务器,然后建立一个无线局域网,让平板终端连接以后,访问电脑硬盘的文件. 如果是只在win7环境下,一切都很简单,按照上文提供的教程就可以实现 ...