Java 回调
要是觉得内容枯燥,您可以点击左下角的播放按钮,让您在音乐的熏陶下愉快的阅读
本文总字数:2321
•武林秘籍
在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。
——摘自维基百科(看完本篇文章再来理解这个定义)
•民间偏方
所谓的回调,就是程序员 A 写了一段程序(程序 a ),其中预留有回调函数接口,并封装好了该程序。
程序员 B 要让 a 调用自己的程序 b 中的一个方法;
于是,他通过 a 中的接口回调自己 b 中的方法。
•该吃药了
第一步
首先定义一个类 A,按照上面的定义就是程序员 A 写的程序 a,这个类里面保存一个接口引用;
新建一个 A.java ,并添加如下代码;
public class A { CallBack callBack; public void setCallBack(CallBack callBack) { this.callBack = callBack; } public void call() { callBack.print(10); } }第二步
当然需要接口的定义,为了方便程序员 B 根据程序 A 编写程序实现接口;
新建一个 CallBack.java ,并添加如下代码;
public interface CallBack{ void print(int x); }第三步
第三是定义程序员 B 写的程序 b;
新建一个 B.java ,并添加如下代码;
public class B implements CallBack{ @Override public void print(int x) { // TODO Auto-generated method stub System.out.println("回调,输出的 x = "+x); } }万法归宗
新建一个 Test.java ,并添加如下代码;
public class Test { public static void main(String[] args) { A a = new A(); a.setCallBack(new B()); a.call(); } }运行结果
•万变不离其宗
在测试方法中可以直接使用匿名内部类,省去 B.java 的创建;
在新包下新建一个 Test.java ,添加如下代码;
public class Test { public static void main(String[] args) { A a = new A(); a.setCallBack(new CallBack() { public void print(int x) { System.out.println("通过匿名内部类回调,输出的 x = "+x); } }); a.call(); } } class A { CallBack callBack; void setCallBack(CallBack callBack) { this.callBack = callBack; } void call() { callBack.print(10); } } interface CallBack{ void print(int x); }运行结果
或者你也可以这么写:
public class Test { public static void main(String[] args) { A a = new A(); CallBack callBack = new CallBack() { public void print(int x) { System.out.println("通过匿名内部类回调,输出的 x = "+x); } }; a.setCallBack(callBack); a.call(); } } class A { CallBack callBack; void setCallBack(CallBack callBack) { this.callBack = callBack; } void call() { callBack.print(10); } } interface CallBack{ void print(int x); }作用都是一样的;
•班门弄斧
参考资料:【回调函数透彻理解Java】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~