JAVA回调机制(CallBack)详解

什么是回调函数(Callback Function)

回调的应用场景非常广泛,在spring中可以看到很多应用了回调的地方,以调用相应的库函数为例子,当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。很常见的函数调用如:

a.func(Param)

但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function),这样解释估计还是比较晦涩,下面我讲用一个简单通俗的例子来解释这一术语。

举个栗子(回调的应用场景)

网上解释回调的例子有很多,大多数使用的是“算数问题”,我觉得这个解释是比较通俗易懂的,但是如果只是单单看这种场景,对于工程应用的使用场景还不是很直观,我更多的是想从实际工程应用的角度来阐述这个概念,因此如果想有个大致的概念可以参考下面这个博客的例子:

请戳这里:一个通俗有趣的回调例子(http://www.importnew.com/19301.html)

应用场景如下:

A类在内存中维护了一组词表,A类的定义如下:

定义一个泛形接口,对于返回值和参数都十分的灵活:

应用场景:

好了,上面简单的三个类就是一个回调的应用,所谓的回调函数就是process函数这个函数是被传入后又被调用的,就我自己的理解而言回调有以下优点:

1、非常的灵活,用户可以在匿名内部类中定义自己的实现方法。

2、回调相当于c++中的参数里的函数指针,可以在实现了CallbackInterface接口的类中,或者匿名内部类中改变其他类中的成员变量。

3、回调还出现在button中的监听器里,安卓代码中形式如下:

4、其实定义一个新的线程然后在run方法中实现相应的逻辑也是一种回调。

5、回调的概念其实不难,难在怎么在设计中灵活的运用

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-10-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4928
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2597
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2988
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3879
来自专栏魂祭心

原 canvas绘制clock

4164
来自专栏落花落雨不落叶

canvas画简单电路图

63311
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6988

扫码关注云+社区