3分钟理解完java中的回调函数

定义

         函数A执行时需要先给它传递函数B, 好在合适的时候调用, 以完成函数A. 这个被传入的函数B被称为回调函数(Callback function).

如何理解

        在调用库中某些预先备好的目标函数时, 需要先给该函数传递另一个函数, 让库中的目标函数在合适的时候, 去调用传给它函数来完成目标函数.

打个比方
        假如你去一家餐厅吃饭, 你告诉服务员说你要吃饭, 然后她会让你对着菜单点菜, 你点完菜后她就会陆续地将才给你上来. 
        你要吃饭的行为就相当于库中的目标函数(通常称之为中间函数), 但进行这个行为前, 你需要告诉服务员你要点什么,  点什么菜是由你决定的, 点菜的这个行为也就是回调函数.

与函数间调用不同的是: 
        中间函数在接收一个回调函数前是不完整的;
        通过实回调函数实现的不同,可以改变中间函数的行为, 所以它非常灵活

如何使用回调函数

1. 首先定义一个回调函数的接口, 方便回调函数能根据业务的不同,实现不同的实例.

/**
 * @author Huzz
 * @created 2021-11-11 13:40
 */
public interface CallbackInterface {

    /**
     * 回调函数
     * @param param
     * @return
     */
    boolean process(String param);

}

 2.  定义中间函数, 并在中间函数中调用回调函数. 中间函数时你直接使用的函数, 你只是在该函数中调用了你定义的回调函数, 它和普通函数没有什么区别.

/**
 * @author Huzz
 * @created 2021-11-11 13:38
 */
@Data
public class Huzz {
    /**
     * 中间函数
     * @param callbackInterface 回调函数
     */
    public String execute(CallbackInterface callbackInterface){
        System.out.println("before: 中间函数的内容");
        boolean result = callbackInterface.process("TEST");
        System.out.println("after: 中间函数的内容");
        return result ? "相同": "不相等";

    }


}

3. 使用回调函数.

public static void main(String[] args) {
        /**
         * 这是我们要使用的对象.
         * 此刻我们需要在这个对象中调用一个函数去做一些事情(这个函数比较特殊, 被叫做中间函数).
         * 于是我们先实例化这个对象
         */
        Huzz huzz = new Huzz();

        /**
         * 调用中间函数: execute()
         * 执行中间函数的时候需要先给它传递一个函数作为参数,这个函数叫做回调函数: process()
         * 回调函数写法:
         *          // 拉姆达表达式
         *          param -> {}
         *          或
         *          // 通常写法
         *          new CallbackInterface() {
         *             @Override
         *             public Boolean process(Object param) {
         *                 return null;
         *             }
         *         }
         *
         */
        String result = huzz.execute(param -> {
            System.out.println("RUN");
            if ("TEST".equals(param)) {
                return true;
            }
            return false;
            /**
             * 可以看到中间函数execute()执行过程中,调用执行了回调函数process()
             * 看似类似普通函数中的简单调用, 但回调函数却有着很大的灵活性,
             * 如下 再调用中间函数实现一些不同的行为试试
             *
             */
        });
        /**
         * 回调函数实现不同的行为
         */
        huzz.execute(new CallbackInterface() {
            @Override
            public boolean process(String param) {
                if (param.length() == 4) {
                    return true;
                }
                return false;
            }
        });
        
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值