java 回调机制

来源:互联网 发布:特别好的句子 知乎 编辑:程序博客网 时间:2024/06/07 10:03

从字面上理解就是,我调用你的方法,你反过来又调用我的方法,就是你来我往。而你反过来又调用我的方法通常称之为回调函数,放在一个专门的接口里面,需要回调机制的类就需要实现这个接口,而且在我调用你的方法的时候,需要把我传递给你,你再通过传递给你的我来调用我的回调函数。

interface CallBack {    void callback(int a);}class Me implements CallBack {    private You you;    public Me(You you) {        this.you = you;    }    public void methodA() {        System.out.println("现在我要调用你的方法了");        System.out.println("正在调用B方法");        you.methodB(this);//因为是回调,我必须把我自己传给你,你执行完B方法后        //才能通知我,因此这里必须传this。如果传的是其他CallBack接口的实现类        //那么就不是回调了,是委托。        //回调的核心就是这个this    }    @Override    public void callback(int a) {        System.out.println("我知道你给我反馈的结果了啊,是这个" + a);    }}class You {    public void methodB(CallBack c) {        System.out.println("正在执行B方法");        System.out.println("B方法调用结束");        System.out.println("“我回调你了啊”,你说");        c.callback(3);//调用的结果通过参数传递给调用方,即我    }}

我调用你,我就是上层应用,你就是下层应用,上层可以随意调用下层的函数,但是下层是不能调用上层的,回调函数是下层唯一能够调用上层的函数。

有的地方说,为了使API可以调用自己写的函数,通过使用暴露接口的方式,说这是一种回调,个人觉得这并不是回调。说为了让自己的API更完美,允许某个函数由自定义实现,只需要定义好相关接口,自定义实现的部分属于高层,而这种实现允许底层调用高层的实现,增加了灵活性云云。这种说法只是涉及到了调用,并不是回调。或者可以说将工作流中的某个功能,按照约定的接口暴露给外部使用者,由外部使用者自定义实现。

原创粉丝点击