注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淡忘邻人

二十七,始发愤

 
 
 

日志

 
 
 
 

Java 基础 - Call Back Function  

2010-11-13 14:24:06|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

概念

回调函数 是由开发者自己编写,但不是给开发者自己调用。通常是用户通过把该方法的地址或者引用传递给系统调用者,系统在必要的时候(比如某事件发生)调用该开发者定义的方法。

例如, C++中模块 A有一个函数 foo,它向模块 B传递 foo的地址,然后在 B里面发生某种事件( event)时,通过从 A里面传递过来的 foo的地址调用 foo
例如, java中, Class A中有一个函数 foo,它把 A的一个实例引用传递给 B(注入到 B),然后在 B里面发生某种事件( event)时,通过 A的实例去调用 foo。典型的例子就是观察者模式中的 update方法就是一个回调函数

例子

FooBar

Java代码
  1. public class FooBar {  
  2.     // the instance of the callback   
  3.     private ICallBack callBack = null;  
  4.       
  5.     /** 
  6.      *  
  7.      * @param callBack 
  8.      */  
  9.     public void setCallBack(ICallBack callBack){  
  10.         this.callBack = callBack;  
  11.     }  
  12.       
  13.     public void postExec() throws RuntimeException{  
  14.         if(this.callBack == null)  
  15.             throw new RuntimeException("the call back must be definded~");  
  16.         this.callBack.postExec();  
  17.     }  
  18. }  
public class FooBar {
    // the instance of the callback 
	private ICallBack callBack = null;
	
	/**
	 * 
	 * @param callBack
	 */
	public void setCallBack(ICallBack callBack){
		this.callBack = callBack;
	}
	
	public void postExec() throws RuntimeException{
		if(this.callBack == null)
			throw new RuntimeException("the call back must be definded~");
		this.callBack.postExec();
	}
}

 ICallBack

Java代码
  1. public interface ICallBack {  
  2.     void postExec();  
  3. }  
public interface ICallBack {
	void postExec();
}

 CallBack test

Java代码
  1. public class Test {  
  2.     public static void main(String[] args){  
  3.         FooBar fooBar = new FooBar();  
  4.         fooBar.setCallBack(new ICallBack(){ /** this is also be called anonymous Class**/   
  5.   
  6.             public void postExec() {  
  7.                 // TODO Auto-generated method stub  
  8.                 System.out.println("hello world by callback");  
  9.             }  
  10.               
  11.         });  
  12.         fooBar.postExec();  
  13.     }  

  评论这张
 
阅读(625)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017