C回调函数与java回调方法
来源:互联网 发布:零境网络有哪些游戏 编辑:程序博客网 时间:2024/04/30 09:22
回调函数,我一开始不是很理解这到底是什么东西,之后看了看书籍和网上的资料,加上自己在编程上也用到这些东西,虽然自己可能也没有完全理解,但是还是根据自己的想法,把这些东西自己归纳下。
一般来说我个人总结回调函数和回调方法,其实主要是更多的时候,人们喜欢把面向对象的语言中的实现方式称为method——方法,而在面向对象时候称为function——函数,其实总之就是一个意思,实现回调。但是由于C和java的机制不一样,所以实现的方式也不一样。
在C中,一个最为人熟悉的东西就是指针,所以回调函数的实现也是通过指针实现的,实际上回调函数就是一个函数指针(函数指针C语言的书上有写出),下面就是一个简单的例子。
实例代码如下:
//两个功能两个函数:void fuck(void){//要实现的功能}void cao(void){//要实现的功能}void makeLove(void *(*ptr)()){//要实现的功能*(*ptr)();}void main(){makeLove(cao);//调用第一个makeLove(fuck);//调用第二个}
这样看上去,整个程序是不是很简洁下?只需要一个规定的接口就可以调用不同的函数 。这样的好处在于已经定义好了接口,像变化的参数一样使用不同的函数,也就是在不同的时刻不用 显式的去调用某个方法。
而在java中,由于安全的考虑,屏蔽了指针这一危险操作,所以不能直接使用函数指针进行回调函数的使用,但是由于java的面向对象和多态性,可以通过一个新的方式:接口,来实现所谓的回调方法。
实例代码如下:(这里转载网上,因为例子比较好)
pubilc interface CallBack{<span style="white-space:pre"></span>public void callbackMethod(); } public class A implements CallBack{ // A实现接口CallBack<span style="white-space:pre"></span>B b = new B();<span style="white-space:pre"></span>public void do(){ <span style="white-space:pre"></span>b.doSomething(this); // A运行时调用B中doSomething方法,以自身传入参数,B已取得A,可以随时回调A所实现的CallBack接口中的方法} public void callbackMethod(){ // 对A来说,该方法就是回调方法<span style="white-space:pre"></span>System.out.println("callbackMethod is executing!"); } public class B{<span style="white-space:pre"></span>public void doSomething(CallBack cb){ // B拥有一个参数为CallBack接口类型的方法<span style="white-space:pre"></span>System.out.println(“I am processing my affairs… ”);<span style="white-space:pre"></span>System.out.println(“then, I need invoke callbackMethod…”);<span style="white-space:pre"></span>cb.callbackMethod();}
这里没有写主方法,但大家可以想象一下在主方法里调用的A类的do方法,会是什么结果,结果就是三个都会输出。实际上在A中调用了B的方法,而B方法中参数又包括一个接口,里面有一个接口的方法,这样调用B的时候,由于传递的参数是A(this指向),所以CallBack 的实例化是A,所以cb.callbackMethod实际上调用的是A.callbackMethod这个方法,因为A实现了ccallback这个接口,这就是java接口的机制,通过继承接口实现方法,在子类中实现,如果想换成其他的方法,那么可以再写一个C类,再次实现callback这个接口中的callbackMethod。
综上,回调函数或者回调方法可以认为是被动的实现,就比如去和他人完成某个任务,你不必完成所有功能,也可以实现异步的操作,这些当然就是后话了。
0 0
- C回调函数与java回调方法
- Java回调函数(方法)
- Java回调函数(方法)
- Java回调函数(方法)
- C 函数指针与回调函数
- C 回调函数
- 【c++】回调函数
- C 回调函数
- C回调函数
- [C] 回调函数
- C 回调函数
- C回调函数
- [C++]回调函数
- Java C C++回调函数
- Java 回调函数 与 观察者模式
- Java回调函数与反射机制
- JAVA回调函数
- java回调函数
- [bash script] 初始化一个 node.js 应用开发 working tree
- 发的房东和地方好的
- fytgdshlkdfhmglgjhvoj
- 线段树离线处理专题
- POJ2536_Gopher II(二分图最大匹配)
- C回调函数与java回调方法
- w6e893 bdn92z10
- m3t461 zvz38x52
- 2014新生暑假个人排位赛06 A.修路
- fee十分风瑟瑟粉色分非色散分粉色
- 该死该死的人格的人过的人更多的人过
- 两个控件的交叉淡入淡出
- java中的 FileWriter类 和 FileReader类的一些基本用法
- Brave Game