java中的接口回调机制

来源:互联网 发布:lua 5.2 for windows 编辑:程序博客网 时间:2024/05/17 04:11

通过这几天对java回调机制的学习,我总结出了自己对回调机制的理解。希望给那些对java回调机制不理解的同学或者没接触过这个的同学参考参考。希望对大家有所帮助!
接口的回调机制有两大好处:1、让程序代码块解耦。2、两个类之间值的互相传递。(当然这个只是我目前能说出的两大好处,回调机制的在安卓当中也是处处存在的哦!当然可能还有其他的我没有总结出来,希望有更多见解的同学能给我提留留言哦!)
我们就以到网上下载图片为例来说明java的接口回调吧!
先见如下A类代码

public class A {    //    private boolean isDownLoad;// 是否下载    public void loadImage(String url, final CallBack callBack) {        new Thread(new Runnable() {            @Override            public void run() {                isDownLoad = true;                String result = callBack.downLoadOperate(isDownLoad);                System.out.println(result);            }        }).start();    }    interface CallBack {        // 下载文件的一系列操作        String downLoadOperate(boolean isDownLoad);    }}

代码解释:
A类写了loadImage(String url,..)去网上下载图片的方法,此方法可能只需要处理方法中传递的参数,如对url的处理,或者处理其他与下载图片无 相关的操作。至于到网上去下载图片等这一系列的操作,都是由A类在内部定义了接口CallBack中downLoadOperate(..)方法去执行。注:此处的loadImage()中的参数不用过多的去理解。
注意哦!1、接口回调机制中的参数传值就在这里体现了,通过downLoadOperate(..)方法中的参数传递出去,即isDownLoad的这个参数,根据这个场景在这里它是表明是否允许下载,通过A类值的传递,让B类去判断是否执行下载。从而实现了两个类之间的交互。2、同时也体现了代码的解耦哦!把要下载图片的过程分离出来了,让实现了CallBack接口的类去实现。如讲解到这还不理解,见B代码吧!
B类代码如下:(这边为了方便直接在B类开设了主线程)

public class B {    A a = new A();    //内部类的使用哦!    a.loadImage("http://www.baidu.com", new CallBack() {        @Override        public String downLoadOperate(boolean isDownLoad) {            String result  = null;            if(isDownLoad){                System.out.println("正在下载...");              result = "B下载操作成功";            }else{                result = "B下载操作失败";            }            return result;        }    });}}

细枝末节的解释:
1、在B类中必须实现A类中定义的接口
2、A类中会调用该接口 中的某一方法并执行,在执行的同时将A类中的数据通过接口中方法定义的参数,将值传入。从而实现
3、 A类中传值给了B类。
(建议大家先从程序主线程执行处看起即B类的main方法,在去理解每一个细节)

1 0
原创粉丝点击