实例基于知乎上一个解释什么是回调机制的回答。
    描述: 一个顾客入住了一个酒店,酒店提供叫醒服务,顾客由于第二天早晨有很重要的事情,所以使用了叫醒服务。让酒店工作人员在第二天早晨7:00叫醒顾客。
    在这个例子中,顾客是A类,酒店是B类,顾客预订叫醒服务相当于A调用了B的b方法,酒店叫醒顾客相当于B调用了A的callback方法(被叫醒)。
    下面给出代码:
    1、首先是回调接口:

    1. package callback;
    2. //回调接口
    3. public interface CallBack {
    4. public void beWakedUp();
    5. }

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

    1. package callback;
    2. public class Customer implements CallBack {
    3. //顾客同时持有酒店类的对象,后面定义
    4. private Hotel hotel;
    5. public Customer(Hotel hotel) {
    6. this.hotel = hotel;
    7. }
    8. @Override
    9. public void beWakedUp() {
    10. System.out.println("被叫醒了");
    11. }
    12. // 客户预约使用酒店的叫醒功能
    13. public void bookWakeService() {
    14. hotel.wakeService(this);
    15. }
    16. // 省略get set
    17. }

    3、酒店类

    1. package callback;
    2. public class Hotel {
    3. public void wakeService(CallBack callBack) {
    4. System.out.println("顾客预约了叫醒服务");
    5. try {
    6. // 模拟时间过了一晚上
    7. Thread.sleep(3000);
    8. System.out.println("时间过去了一夜");
    9. callBack.beWakedUp();
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. }
    13. }
    14. }

    4、测试主类

    1. package callback;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Hotel hotel = new Hotel();
    5. Customer customer = new Customer(hotel);
    6. customer.bookWakeService();
    7. }
    8. }

    输出结果为:
    回调机制的简单解释 - 图1

    不知道你对回调机制有没有进一步理解呢?
    最后总结一下Java中实现回调机制的大体步骤吧:

    • 定义回调接口CallBack
    • 类A实现回调接口CallBack,同时持有类B的对象b
    • 类B中有方法method(CallBack cb)
    • 由于A中持有B的对象,所以A可以调用B的method方法,并将自身作为参数传入method(因为A实现了CallBack接口,所以可以传入)。
    • method方法执行完毕后,调用回调方法。