Java 回调
•武林秘籍
在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。
——摘自维基百科(看完本篇文章再来理解这个定义)
•民间偏方
所谓的回调,就是程序员 A 写了一段程序(程序 a ),其中预留有回调函数接口,并封装好了该程序。
程序员 B 要让 a 调用自己的程序 b 中的一个方法;
于是,他通过 a 中的接口回调自己 b 中的方法。
•该吃药了
第一步
首先定义一个类 A,按照上面的定义就是程序员 A 写的程序 a,这个类里面保存一个接口引用;
新建一个 A.java ,并添加如下代码;
public class A { CallBack callBack; public void setCallBack(CallBack callBack) { this.callBack = callBack; } public void call() { callBack.print(10); } }第二步
当然需要接口的定义,为了方便程序员 B 根据程序 A 编写程序实现接口;
新建一个 CallBack.java ,并添加如下代码;
public interface CallBack{ void print(int x); }第三步
第三是定义程序员 B 写的程序 b;
新建一个 B.java ,并添加如下代码;
public class B implements CallBack{ @Override public void print(int x) { // TODO Auto-generated method stub System.out.println("回调,输出的 x = "+x); } }万法归宗
新建一个 Test.java ,并添加如下代码;
public class Test { public static void main(String[] args) { A a = new A(); a.setCallBack(new B()); a.call(); } }运行结果
•万变不离其宗
在测试方法中可以直接使用匿名内部类,省去 B.java 的创建;
在新包下新建一个 Test.java ,添加如下代码;
public class Test { public static void main(String[] args) { A a = new A(); a.setCallBack(new CallBack() { public void print(int x) { System.out.println("通过匿名内部类回调,输出的 x = "+x); } }); a.call(); } } class A { CallBack callBack; void setCallBack(CallBack callBack) { this.callBack = callBack; } void call() { callBack.print(10); } } interface CallBack{ void print(int x); }运行结果
或者你也可以这么写:
public class Test { public static void main(String[] args) { A a = new A(); CallBack callBack = new CallBack() { public void print(int x) { System.out.println("通过匿名内部类回调,输出的 x = "+x); } }; a.setCallBack(callBack); a.call(); } } class A { CallBack callBack; void setCallBack(CallBack callBack) { this.callBack = callBack; } void call() { callBack.print(10); } } interface CallBack{ void print(int x); }作用都是一样的;
•班门弄斧
参考资料:【回调函数透彻理解Java】