Java 基础 - Call Back Function

 

本人博客已经迁移至 www.shangyang.me 欢迎大家访问

 

概念

回调函数 是由开发者自己编写,但不是给开发者自己调用。通常是用户通过把该方法的地址或者引用传递给系统调用者,系统在必要的时候(比如某事件发生)调用该开发者定义的方法。

例如, C++中模块 A有一个函数 foo,它向模块 B传递 foo的地址,然后在 B里面发生某种事件( event)时,通过从 A里面传递过来的 foo的地址调用 foo。
例如, java中, Class A中有一个函数 foo,它把 A的一个实例引用传递给 B(注入到 B),然后在 B里面发生某种事件( event)时,通过 A的实例去调用 foo。典型的例子就是观察者模式中的 update方法就是一个回调函数 。

例子

FooBar

public class FooBar {
    // the instance of the callback 
	private ICallBack callBack = null;
	
	/**
	 * 
	 * @param callBack
	 */
	public void setCallBack(ICallBack callBack){
		this.callBack = callBack;
	}
	
	public void postExec() throws RuntimeException{
		if(this.callBack == null)
			throw new RuntimeException("the call back must be definded~");
		this.callBack.postExec();
	}
}

 ICallBack

public interface ICallBack {
	void postExec();
}

 CallBack test

public class Test {
	public static void main(String[] args){
		FooBar fooBar = new FooBar();
		fooBar.setCallBack(new ICallBack(){ /** this is also be called anonymous Class**/ 

			public void postExec() {
				// TODO Auto-generated method stub
				System.out.println("hello world by callback");
			}
			
		});
		fooBar.postExec();
	}
}

 

 

C++11 std::function 详解:从函数指针到万能回调容器 在C++编程中,函数指针是实现回调机制的传统方式,但其类型严格,无法统一处理普通函数、成员函数、lambda表达式等不同类型的可调用对象。类型擦除技术通过抽象底层类型细节,提供统一的接口,从而解决了这一问题。std::function正是基于类型擦除原理设计的通用函数包装器,它允许开发者以类型安全的方式存储、复制和调用任何签名匹配的可调用实体。这一特性极大地提升了代码的抽象能力和灵活性,其技术价值在于简化了回调、事件系统和策略模式等场景的实现。在应用层面,std::function广泛用于事件驱动编程、命令 阅读详情

相关推荐

C++11 std::function:函数类型擦除与一等公民抽象

在C++中,函数抽象长期受限于编译期绑定与签名刚性。std::function通过类型擦除技术,将可调用对象(函数指针、lambda、成员函数、bind表达式)统一为运行时可携带状态、可组合替换的一等公民。其底层基于模板实例化与内存布局控制,实现零开销抽象,兼顾静态安全与工程灵活性。结合可变参数模板和lambda,std::function支撑泛型事件总线、异步任务调度等现代C++架构模式;而小对象优化(SOO)机制则直接影响高频回调场景的性能表现。作为C++11函数式编程基石,它标志着从语法糖到系统级抽象

weixin_30247307的博客 364

搭建Simulink模型

完成设置后就可以搭建模型了。 Code Generation 的模板一般采用Function-Call Generator模块。(也有直接对subsystem直接采用 build This Subsystem的形式生成代码,这里不推荐)如下: 生成文件 按照上篇文章描述进行的设置会生成以子系统名为名的.c和.h文件,以及rtwtypes.h。如下: Model.c即函数的源文件。 Mo

modolllee的博客 9376

告别IDEA,在Arch Linux上用Vim 8.2 + coc.nvim打造丝滑Java开发环境(附完整.vimrc配置)

本文详细介绍了如何在Arch Linux上使用Vim 8.2和coc.nvim打造高效的Java开发环境。从基础环境配置到coc.nvim的深度优化,包括代码补全、导航、重构等核心功能,帮助开发者提升工作效率。文章还提供了完整的.vimrc配置示例,适用于复杂Java项目开发。

weixin_30236595的博客 1132

回调函数callback function

原文:http://www.rosoo.net/a/200611/6372.html 简单的说,如果你使用了某个function,那麽你就是『call』了一个function。如果系统或是函式是要求你给一个function pointer,这个function pointer指到一个实际的函式(多半这个函式是你自己写的)。然後它会在适当的时间呼叫此function,则此function就

grantxx的专栏 2346

LMS Virtual.Lab二次开发:声学仿真结果导出方法(VBScript、Python)

Siemens LMS Virtual.Lab 提供一套集成软件平台用以模拟机械系统的品质属性,如结构完整性、振动噪声、耐久性、系统动力学特性、驾驶的平顺性及操纵的稳定性等。

爱看书的小沐 6021

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 460

matlab function call,Function Call

C Constructvoid add_function(void){y1 = u1 + u2;}Procedure1. Open example model ex_function_call.The subsystem has two inputs and returns one output.Selecting the Treat as atomic unit parameter enable...

weixin_42561623的博客 594

详解一典型的反激式开关电源方案

如图,在某系统方案上看到下图所示的单端反激式开关电源方案。

alala120的博客 1万+

回调函数 Callback function 的概念与程序示例

1. 专业解释:      In computer programming, a callback is a reference to executable code, or a piece of executable code, that is passed as an argument to other code. This allows a lower-level software lay

ShuaiWang优快云的博客 3625

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

防火墙旁挂组网

分析拓扑结构,涉及路由器、交换机、防火墙。步骤包括基础 IP 配置、OSPF、防火墙双机热备、安全策略等。第一步,路由器配置。R5、R6 连接 ISP 和核心交换机,配置接口 IP,然后 OSPF。然后防火墙,双机热备的 HRP、VRRP,还有安全策略。接着交换机,划分 VLAN,配置 TRUNK,加入 OSPF。

weixin_73298423的博客 902

JAVA 基础——Call Back Function

纯属转载:[url]http://blog.youkuaiyun.com/giianhui/archive/2011/02/27/6211504.aspx[/url] 熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为“回调”)。Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制。 回调函数...

aliusa的博客 241

基于情感分析+聚类分析+LDA主题分析对服装产品类的消费者评论分析

本研究旨在通过对服装产品类的消费者评论进行综合分析,为企业提供更全面、更深入的市场洞察和决策支持。同时,本研究的方法和结果也可以为其他领域的消费者评论分析提供借鉴和参考。

m0_64336780的博客 2万+

java8 callback_利用java8新特性实现类似javascript callback特性

Java8的新特性之一,就是首次引入了函数式编程Lambda表达式,按oracle的说法,是为了引导java向函数式编程的方向发展。在JDK1.8中,多了一个包,java.util.function,这里主要用到了这个包下面的两个接口:Consumer//Representsanoperationthatacceptsasingleinputargumentandreturns...

weixin_42136791的博客 754

24、中性原子量子计算:原理、方法与实验

本文系统介绍了中性原子量子计算的原理、方法与实验进展。重点阐述了利用碱金属原子作为量子比特,通过磁光阱、光偶极阱和光晶格等技术实现原子捕获与控制的方法。同时,详细分析了单量子比特门操作和量子态工程的实现手段,并总结了相关实验结果与未来发展方向。该技术路线为构建大规模量子计算系统提供了可行方案。

ol789012的博客 244

YOLOv13添加DRB模块map暴涨12.33!准确率提升8.56!召回率提升15.66

本文介绍了在YOLOv13模型中添加DRB模块的改进方法。实验结果显示,添加DRB模块后模型性能显著提升,mAP暴涨12.33%,准确率提升8.56%。文章详细说明了移植过程,包括创建yolov13-DRB.yaml配置文件、修改tasks.py和__init__.py文件,以及引入UniRepLKNet模块的具体实现。其中重点描述了GRNwithNHWC、NCHWtoNHWC等核心组件的实现细节,并提供了完整的模型结构配置代码。这些改进使得YOLOv13模型在保持原有架构优势的同时,获得了更强大的特征提取

FJN110的博客 2819

call back function

用一个比较形象的例子:你饿了,想吃饭,就一会去问你妈一声"开饭没有啊?"这就是正常函数调用.但是今天你妈包饺子,花的时间比较长,你跑啊跑啊,就烦了.于是你给你妈说,我先出去玩会,开饭的时候打我手机.等过了一阵,你妈给你打电话说"开饭啦,回来吃饭吧!"其中,你告诉你妈打手机找你,就是你把回调函数句柄保存到你妈的动作.你妈打电话叫你,就是个回调过程.下面用一个Android中应用到"回调"的场景,来进...

richu123的专栏 643

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java使用回调函数

java回调函数 回调函数(callback Function),顾名思义就是用来回调的函数。在两个类A、B中,A在调用B接口的同时B也在调用A 回调函数也常用于线程中的异步获取消息。 举个简单的例子,公司中老板分发任务给员工A,让A完成任务一段时间后回复老板,而老板总不能等待A完成任务,期间老板可能还要做其他重要的事情,所以A就可以通过回调通知老板任务完成了 代码例子 1.定义回调接口,内置一个员工回复老板的函数 public interface MyCallback { public void ca

Tomorrow_one的博客 784

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++ std::function 详解:从回调机制到事件系统实战

在C++编程中,回调机制是实现模块解耦和事件驱动架构的核心技术。其原理在于将函数作为参数传递或存储,允许在特定条件触发时执行预设操作,从而实现灵活的代码组织。这项技术的核心价值在于提升代码的模块化、可扩展性和可维护性,广泛应用于GUI事件处理、异步任务调度和插件系统等场景。本文聚焦于C++标准库中的 `std::function`,它通过类型擦除技术,为函数指针、Lambda表达式和仿函数等各类可调用对象提供了统一的包装器,解决了回调接口的泛化难题。文中结合**事件系统**的构建实例,深入剖析了 `std:

diaoju3333的博客 419

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++11新特性(lambda,可变参数模板,包装器,bind)

这样看其实也能够很好理解lambda表达式,我们不是嫌弃仿函数自己手动封装类太麻烦了嘛,lambda表达式就是让编译器自动帮我们封装,我们只要把函数的具体实现传过去就可以了,不过lambda表达式的功能比仿函数还是要强大很多的,我们后面慢慢说先看看上面程序的运行结果lambda表达式会自动帮我们推导返回值的类型,所以我们没有在lambda表达式中加上返回值的类型,如果你非想要指定具体的返回值类型,使用表达式中 ->returntype参数。

m0_61350245的博客 515

C++11 Lambda与std::function实战:捕获机制、内存安全与工程落地

Lambda表达式和std::function是C++11引入的核心现代特性,本质并非语法糖,而是基于闭包类生成、类型擦除与函数对象抽象的底层机制。其原理支撑了回调封装、策略注入与异步编程等关键能力,显著提升代码可维护性与模块解耦度。在嵌入式、工业监控及跨平台项目中,合理运用值捕获、引用捕获、移动捕获及std::shared_ptr/weak_ptr生命周期管理,可规避悬空引用、隐式拷贝与循环引用等典型内存安全风险。本文聚焦真实工程场景中的Lambda捕获陷阱与std::function内存安全实践,覆盖G

weixin_30555515的博客 321

java基础知识点总结代码实例

Java基础,代码实例

f000666的博客 270

java.lang.IllegalArgumentException: navigation destination xxx is unknown to this NavController

java.lang.IllegalArgumentException: navigation destination xxx is unknown to this NavController 直接复制我在stackflow中的答案了 It occurs to me when I press back button for two times。At frist,I intercept KeyLi...

qq_26585943的博客 3505

Selene与标准库集成:构建强大C++/Lua应用的完整方案

Selene是一个简单的C++11友好的仅头文件Lua绑定库,它能帮助开发者轻松实现C++与Lua之间的高效交互。通过与C++标准库的深度集成,Selene为构建强大的跨语言应用提供了完整方案,让开发者能够充分利用C++的性能优势和Lua的灵活性。 ## 为什么选择Selene进行C++与Lua集成? 在众多的C++/Lua绑定库中,Selene以其独特的优势脱颖而出: - **轻量级设计*

gitblog_01016的博客 1007

初识java8 lambda表达式(二)

1.常用的内置函数式接口 Predicate接口:输入一个参数,并返回一个Boolean值,其中内置很多用于逻辑判断的默认方法。 @Test public void predicateTest(){ Predicate<String> predicate=s->s.length()>0; boolean test=predicate.test("")...

小木头的博客 205
上一篇: Termnology - 术语
下一篇: 宇宙大爆炸理论
伤神v
博客等级 码龄19年 17粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值