Java回调实现
一。回调的形式
1. C、C++和Pascal允许将函数指针作为参数传递给其它函数。JavaScript,Python,和PHP允许简单的将函数名作为参数传递。
2. .NET Framework的语言中,提供了一种型别安全的引用封装,所谓的'委托',用来定义包含类型的函数指针,可以用于实现回调。
3. 使用匿名的代码块(lambda表达式),用以代替在别处定义的独立的回调函数。
4. 在缺少函数类型的参数的面向对象的程序语言中,例如Java,回调可以用传递抽象类或接口来模拟。回调的接收者会调用抽象类或接口的方法,
这些方法由调用者提供实现。这样的对象通常是一些回调函数的集合,同时可能包含它所需要的数据。这种方法在实现某些设计模式时比较有用,
例如访问者模式,观察者模式与策略模式。
二。Java回调实现
public interface Fetcher {
void fetchData(FetcherCallback callback);
}
public interface FetcherCallback {
void onData(String receiveString);
void onError(Throwable throwable);
}
public class FetcherImpl implements Fetcher {
public Worker worker;
public FetcherImpl(Worker worker){
this.worker = worker;
}
@Override
public void fetchData(final FetcherCallback callback) {
new Thread(new Runnable() {
@Override
public void run() {
worker.execute(callback);
}
}).start();
}
}
public class Worker {
private String str = "";
public void execute(FetcherCallback callback){
try {
init();
callback.onData(str);
} catch (IOException e) {
callback.onError(e);
}
}
private void init() throws IOException{
File file = new File(".\\Worker.java");
FileInputStream fis = new FileInputStream(file);
byte[] fileByte = new byte[(int) file.length()];
fis.read(fileByte);
str = new String(fileByte);
}
}
在上面的代码中,我把回调函数放在其他线程上执行。
进行测试:
public class Test {
public static void main(String[] args){
Fetcher fetcher = new FetcherImpl(new Worker());
fetcher.fetchData(new FetcherCallback() {
@Override
public void onError(Throwable throwable) {
System.out.println("account error : ------------ \n" + throwable.getMessage());
}
@Override
public void onData(String receiveString) {
System.out.println("receive String : ------------- \n" + receiveString );
}
});
}
}
Java回调实现的更多相关文章
- 【java回调】java两个类之间的回调函数传递
背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...
- Java 回调函数
下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...
- Java回调理解 (step by step)
在网上搜索了很多篇关于java回调函数的文章,自己也来试了一下写了这篇博客,可能有些地方理解不到位,烦请各位大大指正. 在计算机程序设计中.回调函数.或简称回调.是指通过函数參数传递到其他代码的,某一 ...
- java回调机制及其实现(转)
1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...
- java回调函数,看完就懂
java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...
- Java回调机制总结
调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...
- Java回调函数的理解与实现
回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 在Java里面,我们使用接口来实现回调.举个例子 所谓的回调,就是程序员 ...
- 转:一个经典例子让你彻彻底底理解java回调机制
一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...
- Java回调实现异步 (转)
出处: Java回调实现异步 在正常的业务中使用同步线程,如果服务器每处理一个请求,就创建一个线程的话,会对服务器的资源造成浪费.因为这些线程可能会浪费时间在等待网络传输,等待数据库连接等其他事情上, ...
随机推荐
- ibatis 灵活的配置文件
<select id="selectAllMmsRepairBySth" parameterClass="hashmap" resultMap=" ...
- CSS3 box-shadow快速教程
box-shadow 属性向框添加一个或多个阴影.这个CSS3的属性很常用,盒阴影.按钮状态等各种地方都有用到,但是你了解并记住各个参数的作用及用法吗? 展示 源码:http://codepen.io ...
- python 根据对象和方法名,返回提供这个方法的定义的类
def find_defining_class(obj, method_name): for ty in type(obj).mro(): if method_name in ty.__dict__: ...
- spring整合quartz并持久化
spring整合quartz有两种方式: 一.常见是使用配置文件,将定时任务保存到内存中 简单示例: <!-- 短信催还提醒任务调度 --> <bean id="overd ...
- C++ 'dynamic_cast' and Java 'instanceof' 使用对比
在Java中,如果A是基类,B是A的派生类,那么instanceof可以用来判断一个实例对象是A还是B,相当于一个二元操作符,但与==, >, < 不同的是,它是由字母组成,是Java的保 ...
- Marching Cube
GPU-Marching-Cubes An Implementation of the Marching Cubes[1] Algorithm Marching Cubes Matlab The St ...
- eclipse java工程和maven工程的互相转换
eclipse java工程和maven工程的互相转换 maven转为工程一般工程: 工程右键--->Maven--->Disable Maven Nature转为一般工程. 一般工程转为 ...
- php函数描述及例子
/** * xml2array() will convert the given XML text to an array in the XML structure. * Link: http://w ...
- C里面的类型字节长度和范围
32位平台 char 1个字节8位 short 2个字节16位 int 4个字节32位 long 4个字节 long long 8个字节 指针 4个字节 64位平台 char 1个字节 short 2 ...
- HDU 1007 Quoit Design(二分+浮点数精度控制)
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...