一个例子弄懂Java中的接口回调
今天新来的同事问我什么是接口回调,我就给他举了一个买水果的例子
情形:
/** * ClassA(A君)让ClassB(B君)买水果,如果给B君的信息是1。就买苹果。如果是2,就买香蕉。 * 然后买完了以后通知A君。至于A君拿到水果以后干什么那就是A君的事情了 * 本质就是。ClassA调用ClassB的buy()(也就是回调方法。)方法。 * 等buy方法完成以后再回头通知classA, * 如此的话。ClassA里边必须有一个B的实例 *本质就是调用接口中的方法 * * * */
1首先要声明一个接口,
/** * Created by benji on 2018/2/9. * QQ:1152138958 */ interface CallbacListener { void buyApple(); void buyBanana(); }
2,ClassB中的方法要以这个接口为参数
/** * Created by benji on 2018/2/9. * QQ:1152138958 */ public class ClassB { public void buy(final int i, final CallbacListener callbacListener){ //延迟3秒 模拟B君买完东西通知A君,如果接收到A君发来的1的信息。就买苹果。如果是2就买香蕉 new Handler().postDelayed(new Runnable() { @Override public void run() { if (i ==1){ callbacListener.buyApple(); }else { callbacListener.buyBanana(); } } },3000); } }
3,ClassA中要有一个ClassB的引用。然后用这个实例去调用buy方法。
private ClassB classB = new ClassB();
classB.buy(1, new CallbacListener() { @Override public void buyApple() { //其实在这里完全可以调用A君的任何方法。也就达到了回调的目的 tv_show.setText("A君。我已经给你买完了,买的是苹果"); } @Override public void buyBanana() { tv_show.setText("A君。我已经给你买完了,买都是香蕉"); } });
其实说白了就是类B中有个以接口为参数当方法C。然后在A中调用B中当方法C。这时候A中必须重写接口当方法。
就这样