Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java回调函数代码实例?

Java回调函数代码实例?

作者头像
用户9919783
发布于 2022-12-14 10:33:25
发布于 2022-12-14 10:33:25
57600
代码可运行
举报
运行总次数:0
代码可运行

回调函数callback,是指通过函数传递参数传递到其他代码,某一块可执行的代码引用。

废话不多说先看一段代码实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/**
 * @author keying
 * @date 2022-12-05 20:07:05
 */
public class Boss221205 implements CallbackInterface {

    private Employee221205 employee221205;

    public Boss221205(Employee221205 employee221205){
        this.employee221205 = employee221205;
    }

    public void question(){
        employee221205.question(this);
    }

    @Override
    public void callbackMethod() {

    }

    @Override
    public void tellBoss(String answer) {
        System.out.println("回答boss:" + answer);
    }
}


/**
 * @author keying
 * @date 2022-12-05 19:53:35
 */
public interface CallbackInterface {
    public void callbackMethod();

    public void tellBoss(String answer);
}

/**
 * @author keying
 * @date 2022-12-05 20:08:14
 */
public interface Employee221205 {

    public void question(Boss221205 boss221205);
}

/**
 * @author keying
 * @date 2022-12-05 20:11:43
 */
public class EmployeeA221205 implements Employee221205{

    @Override
    public void question(Boss221205 boss221205) {
        try{
            Thread.sleep(3000);
        }catch (Exception e){

        }

        // 回调
        boss221205.tellBoss("三秒后回调answer");
    }
}


/**
 * @author keying
 * @date 2022-12-05 19:55:02
 */
public class Main20221205 {
    public static void main(String[] args) {
        Employee221205 employeeA221205 = new EmployeeA221205();
        Boss221205 boss221205 = new Boss221205(employeeA221205);
        boss221205.question();
    }
}

除了一些函数存在固定代码以外,还有一部分代码根据实际业务来写不同的代码,而这种业务场景最适合用回调函数来替代。回调函数如同占位符号,代码由调用者传递执行,回调函数提升函数重用率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author keying
 * @date 2022-12-05 21:31:47
 */
public interface Callback1205 {
    void append(FileWriter fileWriter);
}


/**
 * @author keying
 * @date 2022-12-05 21:33:10
 */
public class Write20221205 {

    public void write(String filename, Callback1205 callback1205) {
              FileWriter fileWriter;
        try{
            fileWriter = new FileWriter(filename,true);
            callback1205.append(fileWriter);
            fileWriter.flush();
            fileWriter.close();
        }catch (Exception e){

        }
    }
}


/**
 * @author keying
 * @date 2022-12-05 21:35:22
 */
public class WriteMain20221205 {
    public static void main(String[] args) {
        Write20221205 write20221205 = new Write20221205();
        write20221205.write("D:\\fw.txt", fileWriter -> {
            try{
                fileWriter.write("write 20221205");
            }catch (Exception e){

            }
        });
     /*   Write20221205 write20221205 = new Write20221205();
        write20221205.write("D:\\fw.txt", new Callback1205() {
            @Override
            public void append(FileWriter fileWriter) {
                try{
                    fileWriter.write("回调");
                }catch (Exception e){

                }

            }
        });*/
     
    }
}

先来一段lambda简写形式:上面代码可以看到,我们可以通过回调函数来实现自己需要write什么内容,这样写增加了代码重用率,在A函数里通过书写函数b的函数名来调用。按照定义好的接口规范,来供其他函数调用。使用技巧则是定义一个接口,在接口中定义我们想回调的方法。

在写个监听按钮的回调函数加深印象:

1、我们先定义一个监听按钮接口。

2、定义点击类,然后main方法调用点击。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author keying
 * @date 2022-12-05 22:28:54
 */
public interface ButtonListener {
    void listener();
}

/**
 * @author keying
 * @date 2022-12-05 22:29:50
 */
public class ButtonMain1205 {
    public static void main(String[] args) {
        ClickButton clickButton = new ClickButton();

        clickButton.click();
    }
}

/**
 * @author keying
 * @date 2022-12-05 22:29:19
 */
public class ClickButton {

    public void click(){
        System.out.println("点击成功");
    }

}

这时候已经点击成功了,那么如何通过回调函数监听这个点击动作呢。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public static void main(String[] args) {
        ClickButton clickButton = new ClickButton();
        clickButton.setButtonListener(new ButtonListener() {
            @Override
            public void listener() {
                System.out.println("触发点击动作");
            }
        });

        clickButton.click();
    }


    private ButtonListener buttonListener;

    public void setButtonListener(ButtonListener buttonListener){
        this.buttonListener = buttonListener;
    }

    public void click(){
        if(buttonListener!=null){
            buttonListener.listener();
        }
        System.out.println("点击成功");
    }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
工厂模式代码实例详解(二)
初学者写代码,可能只要实现功能就好,如果没有工厂模式,当新增功能的时候会出现大量的if esle判断,而且代码全都放在一个类,如同鸡蛋都放在一个篮子里面,并且与java面向编程思想相悖,我们应该把功能点解耦拆分,提供可复用性。
用户9919783
2022/12/14
2950
Java微信公众平台开发(九)--微信自定义菜单的创建实现 (一)使用网页调试工具生成菜单(二)采用代码实现菜单的生成
  自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发模式下常用的两种自定义菜单的实现方式:①不用写实现代码,直接用网页测试工具Post json字符串生成菜单;②就是在我们的开发中用代码实现菜单生成!(参考文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html )在自定义菜单中菜单的类型分为两种,一种为view的视图菜单,点击之后直接跳转到url页面;还有一种是click类型的点击型,后端通过点击事件类型给与不同的相应;后面新增了各种特色功能的菜单其本质都还是Click类型的菜单,所以生成的规则都是一样的,其生成菜单的方式都是向微信服务器post json字符串生成菜单,下面讲述菜单生成的方法和规则!(参考文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html )在自定义菜单中菜单的类型分为两种,一种为view的视图菜单,点击之后直接跳转到url页面;还有一种是click类型的点击型,后端通过点击事件类型给与不同的相应;后面新增了各种特色功能的菜单其本质都还是Click类型的菜单,所以生成的规则都是一样的,其生成菜单的方式都是向微信服务器post json字符串生成菜单,下面讲述菜单生成的方法和规则!
用户2417870
2019/09/18
9380
Java微信公众平台开发(九)--微信自定义菜单的创建实现

        (一)使用网页调试工具生成菜单(二)采用代码实现菜单的生成
Java 回调函数的使用
回调函数 回调函数是什么鬼, 回调函数干嘛用,回调函数可以怎么用 如果有过android开发经验,经常可以看到一些类似下面的代码 Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源 Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听 public void onClick(View v) { String strTmp = "点
一灰灰blog
2018/02/06
2.8K0
一个经典例子让你彻彻底底理解Java回调机制
以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式:
Java团长
2018/07/23
4090
一个经典例子让你彻彻底底理解Java回调机制
【Android 应用开发】Android中的回调Callback
例如给安卓添加按钮点击事件, 我们创建了OnClickListener接口 实现了其中的onClick方法, 在合适的时机(按钮被点击的时候) , 就会执行我们实现的onClick()方法. 这个方法就被回调了 . 
韩曙亮
2023/03/27
1.4K0
回调函数
什么是回调函数,上面的问题说的是不是很空洞,不是太形象,下面是知乎上的一位网友给的答案:
LiosWong
2018/10/29
4.2K0
【Java入门提高篇】Day4 Java中的回调
本文讲解了如何利用Java多线程实现回调,并对常见的回调问题作出了总结。
弗兰克的猫
2018/01/09
6600
通过代码实例说明如何化腐朽为优雅
​  最近我负责的活动促销系统中要在审批的时候增加计算参加活动的商品的毛利率的需求。但是我负责打辅助,主要是同事负责具体开发,我了解了他的实现方式思路以后,果断拒绝了,并给出了我的解决方案以及优点,他发现我的方案确实扩展性和可维护性更好以后就采用了,本文就来通过这个实例来说明如何让本腐朽的代码变得优雅起来。
阿豪聊干货
2018/08/09
3360
Java IO流
# Java IO流 # 文件 # 什么是文件 # 文件流 # 常用的文件操作 # 创建文件对象相关构造器和方法 代码演示: package com.file; import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException; //演示创建文件 public class FileCreate { public static void main(String[] args) {
用户9615083
2022/12/25
1.2K0
Java IO流
Java第四周总结
开发中会使用大量相同数据类型的情况。如果使用数组来解决问题 1. 数组能够使用的方法非常少,功能方法需要程序员自己完成。 2. 数据类型单一化,不支持多种情况。 3. 数组容量不可以更改。
用户7073689
2020/03/18
8390
JAVA记录媒体视频播放进度开发 (实例干货)
搭建环境:springBoot + apache-maven-3.6.3 + mysql + Redisson3.15.4
用户9919783
2022/07/26
1.3K1
HarmonyOS 开发实践 —— 基于UI Observer实现UI组件埋点
组件埋点是一种在前端开发中常用的数据采集方法,它通过在页面中的组件(例如按钮、输入框、下拉框等)上添加跟踪代码,来收集用户的操作行为数据。这些数据可以帮助开发人员分析用户的使用习惯、行为路径等信息,从而优化产品的设计和功能。
小帅聊鸿蒙
2024/12/06
1800
HarmonyOS 开发实践 —— 基于UI Observer实现UI组件埋点
excel转sql小工具
程序猿川子
2024/10/30
1510
excel转sql小工具
selenium-java实现1688 cookies登录 和自动滑动验证码
首先需要下载 webDriver驱动 和你的谷歌浏览器匹配 先放开 用你的1688账户登录一次获取到登录cookies
用户9131103
2023/07/17
1.1K0
JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)
点击提交按钮,把用户编辑的代码上传到服务器上进行编译和运行,把返回的结果显示到结果展示栏。
RAIN7
2022/03/30
1.2K0
JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)
利用Velocity自动生成自定义代码_java版_源码下载
=======================================================
Hongten
2018/09/13
6830
利用Velocity自动生成自定义代码_java版_源码下载
Banner——第三阶段考核——大学生选课管理系统
初学者未完善 后期完善 顺序:entity–>dao—>servce–>controller util包可以先写先测试,测试类看自身情况 entity包 User 类 package entity; /** * @Author: hyy * @Date: 2020/12/18 13:11 */ public class User { private Integer id; private String userName; private String passWo
传说之下的花儿
2023/04/16
6040
回调函数在Java中的应用
关于回调函数(Callback Function),维基百科已经给出了相当简洁精炼的释义。Java的面向对象模型不支持函数,其无法像C语言那样,直接将函数指针作为参数;尽管如此,我们依然可以基于接口来获得等效的回调体验。
程序猿杜小头
2022/12/01
3.4K0
AOP功能代码实例---Spring源码从入门到精通(十七)
可以对不同的开发环境(test,dev),选择性加载不同的组件,如果用AnnocationConfigApplicationContext,需要用无参构造函数,先自己getEnviroment,设置指定加载的test环境,还是dev环境。
用户9919783
2022/07/26
2450
AOP功能代码实例---Spring源码从入门到精通(十七)
设计模式学习笔记(十六)迭代器模式及其在Java 容器中的应用
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。这就是迭代器模式的
归思君
2023/10/16
3320
设计模式学习笔记(十六)迭代器模式及其在Java 容器中的应用
推荐阅读
相关推荐
工厂模式代码实例详解(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验