java回调函数

计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序。如把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法

在java中没有方法指针,但是可以用接口Interface来代替。

caller需要调用method这一方法,但是caller又不负责实现它。比如caller(FileOperationer对象负责操作文件,比如删除、复制)的call方法(delete函数)里发生了某事件(删除文件成功),该事件发生则要调用method(删除文件成功要调用onSuccess来完成别的功能,比如刷新列表),但是method方法不应该由caller来实现(将要完成的功能刷新列表跟操作文件没关系,不应该由FileOperationer实现),应该由callee来实现(刷新列表属于改变视图,应该由FileViewManager类来实现)。

1,我们声明一个接口Interface ICallback (IFileOperationListener),其中有一个方法叫做method(onSuccess)

public interface ICallback {
   void method();

2,Callee负责实现它

public class Callee implements ICallback {
public void method(){
}
}

3,Caller注册Callee

Caller声明一个私有成员接口ICallback,然后在注册函数里通过函数参数将接口实现类Callee传递进来

public class Caller {  
  private ICallback mCallback;  //私有接口成员        
  public void setCallback(ICallback callback) {  
    this.mCallback = callback;  //接口成员的实现:从外部传入  
  }     
} 
4,Caller的某个方法会使用method方法

public void fuc() {
...
mCallback.method();
}

5,Caller的实例先注册回调函数再使用它

Caller caller = new Caller();
caller.setCallback(new Callee());
caller.fuc();

Callee(FileViewManager)是高层,Caller(FileOperationer)是底层。通过回调,底层调用了在高层定义的子程序。


一般程序的写法是高层调用底层,底层回调高层的个别代码。类似于

callee是指挥中心

callee分配任务给caller,和caller约定好caller完成任务后打电话回来好让callee执行后续代码
Caller完成了任务然后打电话回调callee执行接下来的method
callee正在执行后续代码method


所以上述过程也可以这么写:

public class MainTest {

	/**
	 * @param args
	 */
	public static void main(String args[]){
		  Callee callee=new Callee();//初始化指挥中心
		  callee.assignTask();//指挥中心分配任务
		}

}


public class Callee implements ICallback {
	private Caller mCaller;
	public Callee(){
		mCaller=new Caller(this);
	}
	public void method(){
		System.out.println("callee正在执行后续代码method");
	}
	public void assignTask() {
		System.out.println("callee分配任务给caller,和caller约定好caller完成任务后打电话回来好让callee执行后续代码");
		mCaller.call();
	}
}


public class Caller {
	private ICallback mCallback; // 私有接口成员


	public Caller(ICallback callback) {
		this.mCallback = callback; 
	}


	public void call() {
		System.out.println("Caller完成了任务然后打电话回调callee执行接下来的method");
		   mCallback.method(); 
		}
		
	public interface ICallback {
	    void method();
	} 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值