java 回调机制

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

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更完美,允许某个函数由自定义实现,只需要定义好相关接口,自定义实现的部分属于高层,而这种实现允许底层调用高层的实现,增加了灵活性云云。这种说法只是涉及到了调用,并不是回调。或者可以说将工作流中的某个功能,按照约定的接口暴露给外部使用者,由外部使用者自定义实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值