java 回调_用简易例子讲Java中的回调机制

0c60830f7036b2efd35985c0dfef229f.png

首先说点题外话。为什么要写这篇文章,因为在看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、首先是回调接口:

package callback;//回调接口public interface CallBack { public void beWakedUp();}

2、接着是顾客类
顾客类实现回调接口

package callback;public class Customer implements CallBack { //顾客同时持有酒店类的对象,后面定义 private Hotel hotel; public Customer(Hotel hotel) { this.hotel = hotel; } @Override public void beWakedUp() { System.out.println("被叫醒了"); } // 客户预约使用酒店的叫醒功能 public void bookWakeService() { hotel.wakeService(this); } // 省略get set}

3、酒店类

package callback;public class Hotel { public void wakeService(CallBack callBack) { System.out.println("顾客预约了叫醒服务"); try { // 模拟时间过了一晚上 Thread.sleep(3000); System.out.println("时间过去了一夜"); callBack.beWakedUp(); } catch (InterruptedException e) { e.printStackTrace(); } }}

4、测试主类

package callback;public class Main { public static void main(String[] args) { Hotel hotel = new Hotel(); Customer customer = new Customer(hotel); customer.bookWakeService(); }}

输出结果为:

6a9c8cff64ba26247b43d6544d60aeaf.png

不知道你对回调机制有没有进一步理解呢?

最后总结一下Java中实现回调机制的大体步骤吧:

  • 定义回调接口CallBack
  • 类A实现回调接口CallBack,同时持有类B的对象b
  • 类B中有方法method(CallBack cb)
  • 由于A中持有B的对象,所以A可以调用B的method方法,并将自身作为参数传入method(因为A实现了CallBack接口,所以可以传入)。
  • method方法执行完毕后,调用回调方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值