Java接口回调,异步回调理解


前言

本文是作者在学习接口回调时看到
https://blog.csdn.net/fengye454545/article/details/80198446
帖子中后,对其内容的理解和补充,仅供学习参考,如有错误感谢指正。

一、回调简单理解

小明和小李要一起去吃饭,但小李要先洗个脸。那么正常流程应该是小李先去洗个脸,然后通知小明一起去吃饭。
下面是一个简单的例子,小明等效于A,小李等效于B,但是这并不能算是回调,因为最后一起去吃饭的eat方法其实只是在A中直接调用,也就是A调用B的washFace,再调用A自己的eat

//等效类A
public class Ming {
   


    public void eatFood() {
   
        Li li = new Li();
        li.washFace();//在A中调用B的方法
        //洗完脸后再去吃饭
        eat();
    }
    public void eat() {
   
        System.out.println("小明和小李一起吃饭");
    }
}
//等效类B
public class Li {
   
    public void washFace() {
   
        System.out.println("小李洗脸");
    }
}

那么怎么样才能算是回调呢,先理一下逻辑,回调回调,我们首先在A中调用了B的方法,那么之后应当在B中再次调用A的方法,这才算是完成回调。简单点就是在小明A中调用了小李B的washFace,那么完成后应当在小李B的washFace调用小明A的eat方法。

更改后 代码如下
小明A

//等效类A
public class Ming {
   


    public void eatFood() {
   
        System.out.println("进入A eatFood()");
        Li li = new Li();
        li.washFace();//在A中调用B的方法
    }
    public void eat() {
   
        System.out.println("进入A eat()");
        System.out.println("小明和小李一起吃饭");
    }
}

小李B

//等效类B
public class Li {
   
    public void washFace() {
   
        System.out.println("进入B washFace()");
        System.out.println("小李洗脸");
        Ming ming = new Ming();
        ming.eat();//在B中调用A的方法
    }
}

测试

public class Main {
   
    public static void main(String[] args) {
   
        Ming ming = new Ming();
        ming.eatFood();
    }
}

输出结果
在这里插入图片描述
这里为了方便从逻辑上整理,因此我加入了具体进入哪个类哪个方法的输出。
这里跟前面代码最大的区别在于,最后我们调用eat方法并不是在A本身调用,而是通过在B中实例化A的对象调用。

二、Java中用接口实现回调

1.实现接口回调

1.1同步回调

还是实现上面的功能,这次我们选择Java实现回调的常规方式,也就是接口来实现回调,也就是所谓的接口回调。(我们先不管为啥要使用接口这种方式来实现)
那首先肯定是创建一个接口,那这接口里面写啥呢?仔细寻思一下这一整个流程的方法,单属于他们自己的就单拎开不管,然后我们发现他们有一个非常显眼的交互动作:小李洗完脸后通知小明,然后两个人一起去恰饭。这不就明白了。
这是接口内定义的内容 一个一起eat的方法

public interface Eat {
   
    public void eat();
}

eat()里是Ming实现接口的具体内容,跟我们一开始说的没啥区别,另外一个eatFood方法我们进行了一些更改,先不管,看完Li之后一起解释。

//等效类A
public class Ming implements Eat{
   


    public void eatFood() {
   
        System.out.println("进入A eatFood()");
        Li li = new Li();
        li.washFace(this);
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值