java 注册回调_java 实现回调代码实例
JAVA实现回调
熟悉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 callMes = new ArrayList();
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();
}
}
以上就是对Java回调机制的介绍,有需要的同学可以参考下。
java 注册回调_java 实现回调代码实例相关推荐
- java迭代例子_Java 迭代器的代码实例详解
一.摘要 迭代器模式是与集合共生共死的.一般来说,我们只要实现一个容器,就需要同时提供这个容器的迭代器.使用迭代器的好处是:封装容器的内部实现细节,对于不同的集合,可以提供统一的遍历方式,简化客户端的 ...
- 外汇汇率接口 java_基于JAVA的货币汇率api调用代码实例
代码描述:基于JAVA的货币汇率api调用代码实例 关联数据:货币汇率 接口地址:http://www.juhe.cn/docs/api/id/23 1.[代码][Java]代码 import jav ...
- Java建立Zip压缩文件的代码实例
Java建立Zip压缩文件的代码实例 Java代码 import java.io.*; import java.util.zip.*; class Zip { public static void m ...
- java 金数据推送数据_基于JAVA的黄金数据接口调用代码实例
代码描述:基于JAVA的黄金数据接口调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/29 1.[代码][Java]代码 import java.io.Buffer ...
- 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
基于java的货币汇率接口调用代码实例 基于JAVA 的货币汇率接口调用代码实例 代码描述:基于JAVA 的货币汇率接口调用代码实例 代码平台:聚合数据 import java.io.Buffered ...
- java用代码实现星期菜谱_基于JAVA的菜谱大全接口调用代码实例
基于JAVA的菜谱大全接口调用代码实例 代码描述:基于JA V A的菜谱大全接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java. ...
- java实现基金浮动_基于JAVA的重仓股基金接口调用代码实例
代码描述:基于JAVA的重仓股基金接口调用代码实例 关联数据:重仓股基金 接口地址:http://www.juhe.cn/docs/api/id/27 1.[代码][Java]代码 import ja ...
- JAVA爬电信_基于JAVA的电信基站接口调用代码实例
代码描述:基于JAVA的电信基站接口调用代码实例 关联数据:电信基站 接口地址:http://www.juhe.cn/docs/api/id/16 1.[代码][Java]代码 import java ...
- java开发成语的过程_基于JAVA的成语词典接口调用代码实例
基于JAVA的成语词典接口调用代码实例 接口描述:基于JA V A的成语词典接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java. ...
- 回调java 简书_Java接口回调机制详解【转】
一.回调的含义和用途 1. 什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类:同步调用.异步调用和回调.同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的 ...
最新文章
- MySQL百万级数据分页查询及优化
- 点云网络的论文理解(三)-点云网络的优化 PointNet++的总体说明
- 360oauth token是什么意思_我在BOSS直聘上都和面试官聊了些什么?
- 小程序获取form_id 与 小程序获取openid
- C语言程序输入两行汉字,C语言多行输入问题集锦
- 理解 Python 面向对象
- Dubbo集群容错模式之Failover实现
- boost::sub_range相关的测试程序
- mysql数据库表空间最大值_mysql 数据库取最大值
- MATLAB数据分析2
- 个人代码库の自定义后缀名
- “约见”面试官系列之常见面试题之第一百零五篇之v-if与v-show(建议收藏)
- 如何在vue项目中使用sass(scss)
- 多浏览器下,CSS截断功能。
- Activity切换动画---点击哪里从哪放大
- MySql 使用规范推荐(转)
- Low Power概念介绍<Level Shifter>
- DNS如何查找IP?
- vue设置video图片_vue video和vue-video-player实现视频铺满教程
- Android ELF文件编译之符号隐藏