通过简易例子讲解Java回调机制
这篇文章主要介绍了通过简易例子讲解Java回调机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先说点题外话。为什么要写这篇文章,因为在看J.U.C包的FutureTask源码的时候,有一个done()方法,这是个抽象方法,用户实现它之后,FutureTask会在执行完后调用这个方法。这就是回调机制,回调的思想就是:
- 类A调用类B的b方法
- 类B的b方法执行完毕主动调用类A的callback()方法
给出思想过于抽象,所以我会举出一个简单的实例(虽然简单,但是能说明问题),并总结Java实现回调的步骤。
实例基于知乎上一个解释什么是回调机制的回答。
描述:一个顾客入住了一个酒店,酒店提供叫醒服务,顾客由于第二天早晨有很重要的事情,所以使用了叫醒服务。让酒店工作人员在第二天早晨7:00叫醒顾客。
在这个例子中,顾客是A类,酒店是B类,顾客预订叫醒服务相当于A调用了B的b方法,酒店叫醒顾客相当于B调用了A的callback方法(被叫醒)。
下面给出代码:
1、首先是回调接口:
packagecallback; //回调接口 publicinterfaceCallBack{ publicvoidbeWakedUp(); }
2、接着是顾客类
顾客类实现回调接口
packagecallback; publicclassCustomerimplementsCallBack{ //顾客同时持有酒店类的对象,后面定义 privateHotelhotel; publicCustomer(Hotelhotel){ this.hotel=hotel; } @Override publicvoidbeWakedUp(){ System.out.println("被叫醒了"); } //客户预约使用酒店的叫醒功能 publicvoidbookWakeService(){ hotel.wakeService(this); } //省略getset }
3、酒店类
packagecallback; publicclassHotel{ publicvoidwakeService(CallBackcallBack){ System.out.println("顾客预约了叫醒服务"); try{ //模拟时间过了一晚上 Thread.sleep(3000); System.out.println("时间过去了一夜"); callBack.beWakedUp(); }catch(InterruptedExceptione){ e.printStackTrace(); } } }
4、测试主类
packagecallback; publicclassMain{ publicstaticvoidmain(String[]args){ Hotelhotel=newHotel(); Customercustomer=newCustomer(hotel); customer.bookWakeService(); } }
输出结果为:
不知道你对回调机制有没有进一步理解呢?
最后总结一下Java中实现回调机制的大体步骤吧:
- 定义回调接口CallBack
- 类A实现回调接口CallBack,同时持有类B的对象b
- 类B中有方法method(CallBackcb)
- 由于A中持有B的对象,所以A可以调用B的method方法,并将自身作为参数传入method(因为A实现了CallBack接口,所以可以传入)。
- method方法执行完毕后,调用回调方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。