java回调终结贴
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????——我一直不太信任自己的记忆力,所以我把它们都写下来?
? ?
? ? 写程序不明白回调的难听点说真的都没有入门,事件驱动的基本上都是回调实现,比如Android中按钮点击,Swing中的按钮点击,回调运用的地方真的太多了,必须得拿下。可是回调就是那么绕,一时让人摸不着头脑。下面两个例子一定会让你明白回调。
第一个例子我们以android点击按钮为例
? ? Button.class
?
/** * 这是一个按钮 * @author albert * */ public class Button { //点击按钮 public void click(ClickListener listenner){ listenner.onClick(); } }
?点击事件接口,供Button的click事件使用
/** * 模拟事件处理,具体点击后的算法给实现者 * @author albert * */ interface ClickListener{ public void onClick(); }
?下面是在一个Activity上点击按钮的具体处理
?
?
/** * 模拟android中的界面(里面可以添加Button等) * @author albert * */ public class Activity { public static void main(String[] args) { Button btn = new Button(); btn.click(new ClickListener() { @Override public void onClick() { System.out.println("这里具体实现点击后要执行的算法"); } }); } }
?运行Activity后控制台打印一段文字。不知道这个大家有没有看明白,这个是具体的实际操作过程,我们再抽象下。
?
?
public class A { public void func(CallBack callBack){ callBack.call(); } } /**回调接口*/ interface CallBack{ public void call(); }
?
?
具体的实现类B
public class B { public static void main(String[] args) { A a = new A(); a.func(new CallBack() { @Override public void call() { System.out.println("这里具体实现点击后要执行的算法"); } }); } }
?
?
上面两个例子应该很好理解了吧,然后B类可以改良下
?
public class B implements CallBack{ public static void main(String[] args) { B b = new B(); A a = new A(); a.func(b); } @Override public void call() { System.out.println("让B实现callback接口"); } }
?
?
原文:http://zyqwst.iteye.com/blog/2264966