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回调实现异步 在正常的业务中使用同步线程,如果服务器每处理一个请求,就创建一个线程的话,会对服务器的资源造成浪费.因为这些线程可能会浪费时间在等待网络传输,等待数据库连接等其他事情上, ...
随机推荐
- POJ1135 Domino Effect(SPFA)
题目大概是,普通骨牌连接两张关键骨牌,一旦一张关键骨牌倒下与其相邻的普通骨牌也倒下,普通骨牌倒下与其相邻的骨牌也倒下.给出所有有普通骨牌相连的两个关键骨牌之间普通骨牌倒下所需时间,问1号关键骨牌开始倒 ...
- BZOJ3833 : [Poi2014]Solar lamps
首先旋转坐标系,将范围表示成矩形或者射线 如果范围是一条线,则将灯按y坐标排序,y坐标相同的按x坐标排序, 对于y相同的灯,f[i]=min(i,它前面灯发光时刻的第k[i]小值), 线段树维护,$O ...
- access-Control-Allow-Origin跨域请求安全隐患
最新的W3C标准里是这么实现HTTP跨域请求的,Cross-Origin Resource Sharing,就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域. ...
- topcoder SRM 591 DIV2 TheArithmeticProgression
#include <iostream> #include <cstdlib> using namespace std; class TheArithmeticProgressi ...
- POJ 3286 How many 0's?(数位DP)
题目链接 终于过了,边界让我wa了好几次,猥琐的用AC代码对拍,很无奈,用非常麻烦的方法.写一下,估计以后再碰到,肯定看不懂这是写的什么了. 以前做过,统计1和2的,统计0比1和2麻烦多了,有前导0的 ...
- 用LinqPad查看Nhibernate生成的sql语句
使用Nhibernate开发一般都要对Nhibernate生成的sql语句进行查看及分析,查看Nhibernate生成的sql语句,可以使用NHProfiler和log4net.但NHProfiler ...
- for循环下九九乘法表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [文字雲產生器] Tagxedo 把文字串成雲、變成畫,印在 T-Shirt、馬克杯、詩袋….
http://www.tagxedo.com/app.html 有種東西叫「Word Clouds」,就是把一堆文字依照不同的大小.顏色.角度與位置拼湊在一起,讓他變成像一朵雲一般.組合成各種不同的形 ...
- 菜刀轻松砍杀安全狗 asp一句话中转脚本
看到很多朋友看了我的PHP中转脚本http://phpinfo.me/2014/02/01/309.html ,问我那个脚本只能中转PHP的,但是asp的呢 asp连接的时候安全狗拦截的正是菜刀POS ...
- WPF之拖动项滚动条自滚动(当拖动项到达高度的边界时候滚动条自己可以上下滚动)
参考 http://www.cnblogs.com/ListenFly/p/3281997.html Point svPoint = e.GetPosition(sv); if (sv.ActualH ...