调用API的SDK相关知识:实现回调函数.
熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为“回调”)。Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制。
Java支持interface,通过interface可以实现相同的回调。其诀窍就在于定义一个简单的interface,申明一个被希望回调的方法。
例如,假定当某一事件发生时会得到通知,我们可以定义一个interface:
public interface InterestingEvent {
// 这只是一个普通的方法,可以接收参数、也可以返回值
public void interestingEvent();
}
这样我们就有了任何一个实现了这个接口类对象的手柄grip。
当一事件发生时,需要通知实现InterestingEvent 接口的对象,并调用interestingEvent() 方法。
class EventNotifier {
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier(InterestingEvent event) {
ie = event;
somethingHappened = false;
}
public void doWork() {
if (somethingHappened) {
// 事件发生时,通过调用接口的这个方法来通知
ie.interestingEvent();
}
}
}
在这个例子中,用somethingHappened 来标志事件是否发生。
希望接收事件通知的类必须要实现InterestingEvent 接口,而且要把自己的引用传递给事件的通知者。
public class CallMe implements InterestingEvent {
private EventNotifier en;
public CallMe() {
// 新建一个事件通知者对象,并把自己传递给它
en = new EventNotifier(this);
}
// 实现事件发生时,实际处理事件的方法
public void interestingEvent() {
// 这个事件发生了,进行处理
}
}
以上是通过一个非常简单的例子来说明Java中的回调的实现。
当然,也可以在事件管理或事件通知者类中,通过注册的方式来注册多个对此事件感兴趣的对象。
1. 定义一个接口InterestingEvent ,回调方法nterestingEvent(String event) 简单接收一个String 参数。
interface InterestingEvent {
public void interestingEvent(String event);
}
2. 实现InterestingEvent接口,事件处理类
class CallMe implements InterestingEvent {
private String name;
public CallMe(String name){
this.name = name;
}
public void interestingEvent(String event) {
System.out.println(name + ":[" +event + "] happened");
}
}
3. 事件管理者,或事件通知者
class EventNotifier {
private List<CallMe> callMes = new ArrayList<CallMe>();
public void regist(CallMe callMe){
callMes.add(callMe);
}
public void doWork(){
for(CallMe callMe: callMes) {
callMe.interestingEvent("sample event");
}
}
}
4. 测试
public class CallMeTest {
public static void main(String[] args) {
EventNotifier ren = new EventNotifier();
CallMe a = new CallMe("CallMe A");
CallMe b = new CallMe("CallMe B");
// regiest
ren.regist(a);
ren.regist(b);
// test
ren.doWork();
}
}
调用API的SDK相关知识:实现回调函数.相关推荐
- C语言、嵌入式重点知识:回调函数
前言 上文分享了一个专用的双链表的基本操作示例:双链表的操作示例(附代码) 这里提到了一个关键词:专用.与专用对应的词是通用. 我们从字面上可以很容易理解这两个词,专用就是针对特定情况的,特点就是很有 ...
- c向python注册函数_python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)...
其实是python后台程序常用方法: C开发完成底层的功能,python直接把C当做python模块进行调用. 需要做两个工作: python能调用C语言的函数: python通过调用C函数,并注册p ...
- tushare调用API获取金融相关数据
首页:https://tushare.pro/ 整体的思路是: 首先获得token,可以参考官网教程 代码中传入token,调用接口 步骤 1. 获得token 首先进入网站:https://tush ...
- PHP实现调用淘宝SDK开放接口返回天猫或淘宝商品详情
在淘宝开发平台申请到app key及app secret并在开放平台上的app tools在线测试成功以后,就可以在自己的项目中使用淘宝SDK来调用淘宝或天猫的商品详情了,包括标题.图片.价格等等所有 ...
- 【学习总结】-Apsara Clouder专项技能认证:实现调用API接口学习总结
Apsara Clouder专项技能认证:实现调用API接口-学习总结 API的概念: API的特点: API的分类: 为什么要使用API 阿里云API市场 API请求与认证 Web API协议 HT ...
- C++回调函数中调用Python函数出现的死锁问题调试及解决
一.查找死锁原因: 1.使用gdb exe指令进入gdb命令行,再输入r运行可执行文件 gdb /home/sdhm/catkin_ws/devel/lib/gpd_ros/gpd_server GN ...
- 回调函数 —— 借助中间通用函数(形参里有函数指针,实现函数注册)调用不同的回调函数 (多态/分层)
回调函数传参:函数指针做函数参数(回调函数) 目录 背景 回调函数是实现函数分层且单向依赖的好办法,使用函数指针运行 struct结构体回调函数代码更清晰 简单理解回调函数 Demo 其他回调函数博文 ...
- lwIP 细节之三:TCP 回调函数是何时调用的
使用 lwIP 协议栈进行 TCP 裸机编程,其本质就是编写协议栈指定的各种回调函数.将你的应用逻辑封装成函数,注册到协议栈,在适当的时候,由协议栈自动调用,所以称为回调. 注:除非特别说明,以下内容 ...
- buu(前三页第二弹) RSA习题与相关知识总结
文章目录 buu [ACTF新生赛2020]crypto-rsa3 1 题目描述: 题目分析: 收获与体会: buu [WUSTCTF2020]情书 1 题目描述: 题目分析: 收获与体会: buu ...
最新文章
- 给自己提个醒:关于document.getElementsByName无法获取非表单元素
- halcon知识:hough变换检出图像的直线
- pta函数统计素数并求和_关于求和的4种函数公式,此文讲透了,尤其是第4种,绝对的高效...
- 偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便
- C# 定义了 7 种变量类别:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量
- 菜鸟进阶必修课-主板插线小百科(图)
- linux之我常用的20条命令(之二)
- 【论文写作】JSP在线考试系统如何写功能描述
- 自适应采样次数的Ransac算法
- 计算机桌面小工具软件,win10桌面小工具(Desktop Gadgets Installer)
- 基于Android的城市环境监测系统
- Typecho网站访问浏览总量统计插件PageViews升级版
- CentOS安装Nacos后,输入默认用户名和密码nacos/nacos,提示“用户名或密码错误”
- hdu 1548 A strange lift (BFS)
- Java是先难后易吗_做题先易后难,干活先难后易
- 2018读书清单与情况
- 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
- 基于matlab的电流滞环控制,电流滞环控制matlab
- 关于protel99se建自己的库
- 应用系统外部接口数据稽核问题分析经历及经验分析
热门文章
- 【鸿蒙 HarmonyOS】UI 组件 ( 进度条 ProgressBar 和 RoundProgressBar 组件 )
- 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则性质 | 非频繁项集超集性质 | 频繁项集子集性质 | 项集与超集支持度性质 )
- 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )
- 【Android 应用开发】Android之Bluetooth编程
- BinaryTreeTraversal(二叉树遍历)
- PHP将英文数字转换为阿拉伯数字
- 【福利】微信小程序130个精选Demo合集
- maven仓库找不到需要的jar包解决办法-转载
- Django ORM 级联删除
- windows 域用户账号验证登陆