Java基础之回调函数总结(八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Java回调函数介绍
    • 🌻3.代码实例
      • 🐓3.1 基础
      • 🐓3.2 增加类中实现
      • 🐓3.3 匿名类调用回调
      • 🐓3.4 增加注册回调接口
      • 🐓3.5 增加注销回调接口

🌻1.前言

本篇目的:Java

🌻2.Java回调函数介绍

  • Java回调函数是一种在Java编程语言中实现特定功能的技术。回调函数允许一个函数作为参数传递给另一个函数,以便在需要时调用它。这种技术在事件处理、异步编程和网络编程中非常有用。
  • 在Java中,回调函数通常通过接口实现。首先,定义一个接口,其中包含回调方法。然后,创建一个实现了该接口的类,并在该类中实现回调方法。最后,将实现了接口的类的对象作为参数传递给另一个函数,以便在需要时调用回调方法。
  • 举个例子,假设我们想要在用户点击按钮时执行一些操作。我们可以定义一个名为OnClickListener的接口,其中包含一个名为onClick的方法。然后,我们可以创建一个实现了OnClickListener接口的类,并在该类中实现onClick方法。最后,我们将实现了OnClickListener接口的类的对象作为参数传递给按钮的setOnClickListener方法,以便在用户点击按钮时调用onClick方法。
  • 这个例子展示了Java回调函数的基本用法。通过使用回调函数,我们可以在用户点击按钮时执行特定的操作,而不需要修改按钮的类。这使得我们的代码更加模块化和可维护。
  • 除了在用户界面编程中使用回调函数外,它们还可以在异步编程和网络编程中使用。在异步编程中,回调函数可以在耗时操作完成时通知主线程。在网络编程中,回调函数可以在接收到网络响应时处理数据。
  • 总之,Java回调函数是一种非常有用的技术,它可以帮助我们实现特定功能,而无需修改现有代码。通过使用接口和实现了接口的类,我们可以将回调函数作为参数传递给其他函数,以便在需要时调用它们。这使得我们的代码更加模块化和可维护,同时也提高了代码的可读性和可维护性。

🌻3.代码实例

🐓3.1 基础

//1.定义一个回调接口
interface Callback {void send(String result, int num);
}//2.实现一个接口(一个篮子)
class LocalCallback implements Callback {public void send(String result, int num) {System.out.println("result = " + result + ", num = " +  num);}
}public class Callback03 {public static void main(String[] args) {LocalCallback callback = new LocalCallback();//将数据给实现interface的接口(将数据)callback.send("Hello Callback!", 20);}
}

🐓3.2 增加类中实现

//1.定义一个回调接口
interface Callback {void send(String result, int num);
}//2.谁需要数据,谁实现Callback接口即可,这里是由LocalCallback来实现
class LocalCallback implements Callback {@Overridepublic void send(String result, int num) {System.out.println("result = " + result + ", num = " +  num);}
}class Task {public Callback mcallback;//1.注册回调函数void register(Callback callback){mcallback = callback;}//2.给用户实现Callback接口的LocalCallback传回调数据void send(String data, int num){mcallback.send(data, num);}
}public class Callback04 {public static void main(String[] args) {//1.回调接口实现LocalCallback callback = new LocalCallback();//2.创建任务Task task = new Task();//3.注册回调函数,本质将接口类LocalCallback的地址传给mcallbacktask.register(callback);String data = "Hello Callback";int num = 20;//4.调用回调函数task.send(data, num);}
}

🐓3.3 匿名类调用回调

// 定义一个回调接口
interface Callback {void send(String result, int num);
}class Task1 {void execute(Callback callback){callback.send("Hello Callback!", 20);}
}public class Callback05 {public static void main(String[] args) {Task1 task1 = new Task1();//匿名类实现task1.execute(new Callback() {@Overridepublic void send(String result, int num) {System.out.println("result = " + result +  ", num =  " + num);}});}
}

🐓3.4 增加注册回调接口

javac Callback07.java
java Callback07

//1.定义一个回调接口
interface Callback {void send(String result, int num, String name);
}//2.谁需要数据,谁实现Callback接口即可,这里是由LocalCallback来实现
class LocalCallback implements Callback {@Overridepublic void send(String result, int num, String name) {System.out.println("result = " + result + ", num = " +  num + ", name = " + name);}
}class Task {public Callback mcallback;//1.注册回调函数void register(Callback callback){mcallback = callback;}//2.给用户实现Callback接口的LocalCallback传回调数据void send(String data, int num, String name){mcallback.send(data, num, name);}
}public class Callback07 {public static void main(String[] args) {//1.回调接口实现LocalCallback callback = new LocalCallback();//2.创建任务Task task = new Task();//3.注册回调函数,本质将接口类LocalCallback的地址传给mcallbacktask.register(callback);String data = "Hello Callback";String name = "JIM";int num = 20;//4.调用回调函数task.send(data, num, name);}
}

🐓3.5 增加注销回调接口

javac Callback07.java
java Callback07

//1.定义一个回调接口
interface Callback {void send(String result, int num, String name);
}//2.谁需要数据,谁实现Callback接口即可,这里是由LocalCallback来实现
class LocalCallback implements Callback {@Overridepublic void send(String result, int num, String name) {System.out.println("result = " + result + ", num = " +  num + ", name = " + name);}
}class Task {public Callback mcallback;//1.注册回调函数void register(Callback callback){mcallback = callback;}void unregister(){mcallback = null;}//2.给用户实现Callback接口的LocalCallback传回调数据void send(String data, int num, String name){mcallback.send(data, num, name);}
}public class Callback07 {public static void main(String[] args) {//1.回调接口实现LocalCallback callback = new LocalCallback();//2.创建任务Task task = new Task();//3.注册回调函数,本质将接口类LocalCallback的地址传给mcallbacktask.register(callback);String data = "Hello Callback";String name = "JIM";int num = 20;//4.调用回调函数task.send(data, num, name);//5.注销回调task.unregister();	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你会用Nginx的第三方模块吗?

你好,我是赵兴晨,97年文科程序员。 你使用过Nginx的第三方模块吗?今天咱们来聊聊Nginx的第三方模块。 在深入了解Nginx的高性能与灵活性的过程中,我们不可避免地会接触到第三方模块。 这些模块是对Nginx原生功能的有力扩展&…

SpringBoot+Redis发送短信

SpringBootRedis发送短信 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId&g…

Python | Leetcode Python题解之第134题加油站

题目&#xff1a; 题解&#xff1a; class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:start, cur_res, total_res 0, 0, 0for i in range(len(gas)):cur_res gas[i] - cost[i]total_res gas[i] - cost[i]if cur_res < 0:cur_r…

Java EE-Spring Security配置

Spring Security 基本概念 spring security 的核心功能主要包括&#xff1a; 认证 &#xff08;你是谁&#xff09; 授权 &#xff08;你能干什么&#xff09; 攻击防护 &#xff08;防止伪造身份&#xff09; 其核心就是一组过滤器链&#xff0c;项目启动后将会自动配置。…

可视化数据科学平台在信贷领域应用系列四:决策树策略挖掘

信贷行业的风控策略挖掘是一个综合过程&#xff0c;需要综合考虑风控规则分析结果、效果评估、线上实时监测和业务管理需求等多个方面&#xff0c;以发现和制定有效的信贷风险管理策略。这些策略可能涉及贷款审批标准的调整、贷款利率的制定、贷款额度的设定等&#xff0c;在贷…

c++简略实现共享智能指针Shared_Ptr<T>

重点&#xff1a; 1.引用计数在堆上&#xff08;原本应为原子变量&#xff09; 2.引用计数增加减少需要加锁保证线程安全。 3.内部实现Release函数用于释放资源 4.未实现&#xff0c;增加自定义删除器可以将Release修改为模板函数&#xff0c;传入可调用参数。对于shared_p…

java分布式的ACP是什么

ACP 1、ACP是什么 一致性&#xff08;Consistency&#xff09;&#xff1a;在分布式系统中&#xff0c;当更新操作完成之后&#xff0c;所有节点在同一时间看到的数据是一致的。换句话说&#xff0c;对于任何数据的读取&#xff0c;都会得到最后写入的数据。可用性&#xff0…

工商注册代理记账——打造专业服务的专业机构

在当今竞争激烈的商业环境中&#xff0c;注册和运营一家公司成为了每一个企业家的重要步骤&#xff0c;这并不是一件容易的事&#xff0c;涉及到的不仅是法律法规的学习&#xff0c;还有各种手续的办理、税务筹划等问题&#xff0c;这个时候&#xff0c;就需要专业的工商注册代…

Flask 学习笔记 总结

python基础 服务端开发编程 第一个是赋值运算&#xff0c;第二是乘法&#xff0c;最后是一个是幂&#xff08;即a2&#xff09; a 2 a * 2 a ** 2 Python支持多重赋值&#xff1a; a, b, c 2, 3, 4 这句命令相当于&#xff1a; a 2 b 3 c 4 Python支持对字符串的灵活…

redis常用设计模式

Redis常用的设计模式分为读&#xff0c;写&#xff0c;读写三种 一、概要说明 读操作 Read Through Pattern 读穿透 写操作 以Redis统一视图为准&#xff1a;先更新缓存&#xff0c;后更新数据库。 Write Through Pattern 直写模式&#xff08;首先将数据写入缓存&#xf…

51建模网3D编辑器:一键为3D模型设置特殊材质

3D设计师要对3D模型设置玻璃或者钻石材质时&#xff0c;操作比较复杂&#xff0c;但是利用51建模网的3D编辑器&#xff0c;不用下载安装软件&#xff0c;在线通过浏览器即可编辑&#xff0c;具有一键设置特殊材质的功能。目前&#xff0c;它支持钻石材质、玻璃材质和水波纹材质…

Java——基础快速过

1.注释&#xff0c;标识符&#xff0c;关键字 1.1注释 单行注释&#xff1a;// 注释内容&#xff08;用的最多&#xff09; 多行注释&#xff1a;/* 注释内容*/&#xff08;不推荐&#xff09; 文档注释&#xff1a; /** 文档注释 */&#xff08;常见于方法和类之上描述方法和…

分布式任务队列系统 celery 进阶

通过前面的入门&#xff0c;我们大概了解了celery的工作原理及简单的入门代码示例&#xff08;传送门&#xff09;&#xff0c;下面进行一些稍微复杂的任务调度学习 多目录结构异步执行 在实际项目中&#xff0c;使用Celery进行异步任务处理时&#xff0c;经常需要将代码组织…

【面试题】创建两个线程交替打印100以内数字(一个打印偶数一个打印奇数)

阅读导航 一、问题概述二、解决思路三、代码实现四、代码优化 一、问题概述 面试官&#xff1a;C多线程了解吗&#xff1f;你给我写一下&#xff0c;起两个线程交替打印0~100的奇偶数。就是有两个线程&#xff0c;一个线程打印奇数另一个打印偶数&#xff0c;它们交替输出&…

Aws EC2,kubeadm方式安装kubernetes(k8s)

版本 docker版本&#xff1a;20.10.25 k8s版本&#xff08;kubeadm&#xff0c;kubelet和kubectl&#xff09;&#xff1a;1.20.10-0 初始化 # 禁用 SELinux sudo setenforce 0 sudo sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config# 关闭防火墙 sudo …

MySQL的联合索引及案例分析

1. 联合索引 关于联合索引的详解参考博客【Mysql-----联合索引和最左匹配】&#xff0c;包含讲解 最左匹配 联合索引失效的情况 不遵循最左匹配原则范围查询右边失效原理like索引失效原理 比较关注的点在于&#xff1a; 对A、B、C三个字段创建一个联合索引&#xff08;A, …

在线建站流程分析

建站流程是指通过互联网创建一个个人或企业网站的过程。随着互联网的发展&#xff0c;越来越多的人和机构开始意识到网络的重要性&#xff0c;建站成为一种常见的行为。在线建站的流程一般包括以下几个步骤。 首先&#xff0c;选择一个合适的建站平台。目前&#xff0c;有很多在…

前端逆向之查看接口调用栈

一、来源 再分析前端请求接口数据的时候&#xff0c;其中有一个sid不知道是前端如何获取的&#xff0c;一般情况下只需要全局搜搜sid这个字符串或者请求接口的名称就可以了&#xff0c;基本都能找到sid的来源&#xff0c;但是今天这个不一样&#xff0c;搜什么都搜不到 接口地…

面试题------>MySQL!!!

一、连接查询 ①&#xff1a;左连接left join &#xff08;小表在左&#xff0c;大表在右&#xff09; ②&#xff1a;右连接right join&#xff08;小表在右&#xff0c;大表在左&#xff09; 二、聚合函数 SQL 中提供的聚合函数可以用来统计、求和、求最值等等 COUNT&…

AI论文工具推荐

AI 在学术界的使用情况也比较疯狂&#xff0c;特别是一些美国大学&#xff0c;用 AI 来辅助阅读文献以及辅助写论文的越来越多&#xff0c;毕竟确实可以提高写作效率&#xff0c;特别是在文献综述和初稿生成方面。 但在科研界其实&#xff0c;发现看论文的速度已经赶不上发论文…