Java—回调—CallBack

回调。对于初学者来说,是一个坎,一个比较既陌生又熟悉的坎。

为什么说是陌生呢?你让他写一个回调出来,肯定能想起大概,然后又写不出来。为什么又很熟悉呢?你让他使用已经定义好的回调却用的很熟手,例如Listener等。。。所以说,这是初学者心里深深的一道坎。今天,就此对回调进行总结一下。


什么是回调呢?

举个栗子:

张三和李四在张三家里一起聊天,突然间两人都感到口渴,一拍即合,觉得喝白开水又没什么意思,那好吧,泡壶茶。泡茶嘛,要满足最基本的要素。要有白开水和热水,还要有茶壶和茶杯。对吧,好,开始了,张三开始在家煮水,煮啊煮,哎,好了,开始泡茶了,当张三拿到茶壶的时候,咦,家里的茶叶没了,怎么办,这个时候,李四说,我家里有茶叶,我回去我家里拿,好了,就这样了。突然间,张三又说了一句话,我不会泡茶啊。李四说,没关系,我会,于是,李四开始了泡茶的准备,把所有的都事先准备好,水也预先的倒进茶壶,等拿茶叶回来就直接把茶叶扔进去泡就可以了,一切都准备就绪,李四就夺门而出,回去拿茶叶了。张三就等。稍微等了一会,李四带着普洱回来了。把他的普洱扔进去,普洱茶就出来了,然后就开始喝了,接着继续聊天。

这个回调就是这样。就是这么的简单。

下面来看例子:

回调的接口(相当于泡茶的方法)


回调者(相当于张三)


调用者(相当于李四)



代码全部都在这里了,接下来一个一个类的解释一下:

首先是接口CallBack,接口里面定义了一个方法,call() 这个方法相当于上面的例子中的泡茶的方法,这里只是定义了泡茶的方法,方法中需要传递的参数是茶叶。

其次是Caller类,这个类相当于上面的例子中的张三,里面的call方法就是张三泡茶的方法,因为张三不会泡茶,所以就直接的调用了接口里面的泡茶的方法,然后把相应的茶叶传递进去,张三里面还有一个方法,叫setCallBack,其实吧,你发现没有,张三里面定义的CallBack是private的,是私有的,所以,张三必须提供一个设置的方法给李四去设置泡茶的方法。

最后是Main函数,整个CallBackMain就相当于李四,李四先new了一个张三,然后设置了一个泡茶的方法给张三。因为前面说了,张三不会泡茶,必须外界提供。最后,李四调用了张三的泡茶的方法。


代码就解释到这里。前面的例子和解释估计不太相吻合吧,反正回调机制就是这样。


最终就这样理解,我知道要做什么。但我不会做,同时我也不知道什么时候做。所以,怎么做,要别人提供,同时,什么时候做,也要别人通知。

就相当于整个栗子中的张三,张三知道要泡茶。但不会泡,同时也不知道什么时候泡(因为张三无法测算李四什么时候才能带着茶叶回来),所以,泡茶的方法不但要李四提供,而且,什么时候泡,也要李四来决定。



最后,前面的理解清楚后,纠正一下程序存在的毛病:

Main函数中,调用的时候是直接调用(直接就泡茶了)的,万一我没有提供呢?(没有提供泡茶的方法呢?)、是不是要挂,肯定的,如果没有,那肯定会报空指针异常。所以,我们一般在使用的时候都会先判断一下。问题来了,既然要判断,你泡茶的方法是私有的,你只提供给我设置的方法,没有给我获取的方法,咋办?写一个呗。好了。最终的代码如下所示:



红色圈内的是改动了代码,接口的代码没有做改动,就不截图了。


回调,最终可以理解成两个人干活,一个人知道这事情要什么时候做,但不知道要怎么做;而另一个人知道怎么做,却不知道什么时候做。所以,会做的人就把电话号码给不会做的人,说,到时候你打个电话过来就可以了。


回调就写到这里。。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值