接口回调(笔记

article/2025/10/8 13:07:39

接口回调讲解

  • 回调定义
  • 回调机制
  • 回调意义
  • 接口回调的实现步骤
  • 参考

网上看了一堆,感觉有点零散,我自己总结一下。看评论区说存在很多问题,我读了一下,雀氏存在一些,非常感谢批评指正,我重新写一写。(ps:比较懒惰,随手改一改,大概是这么个意思)至于回调还细分成同步回调,异步回调。其实就是要不等B执行完A才执行,要不就是A交代给B,A就开始干其他的事。

回调定义

正式定义

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript、Java等编程语言中可以使用仿函数或匿名函数。

这正式定义麻麻咋咋一大堆文字,愣是看得很吃力,反正看不懂就对了,瞅瞅通俗的定义,如果没看懂,瞧瞧更通俗的定义

通俗定义

在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。

如下图:其中在红色的waiting time中A啥也不做,单线程等待B执行完再继续执行就是同步回调,A不等待B,而是继续向下执行其他的事,就是异步回调。
1

更通俗解释:
其实小明玩游戏or干其他的事这个行为就相当于异步回调。如果小明啥也不干,一直等待小红完成了证明,然后自己收到了并copy完了,交完作业再去玩就是同步了。但是如果小红写了好几个小时才写出来的话,小明傻傻的等着也不是个事。而这在程序中就会出大问题,想想B阻塞时间过长,A还有其他很多任务要做,通常会导致A的方法没法正常执行下去。

小明写作业,遇到一道证明题,证明矩阵是正定的,但是小明不会啊,咋办呢?他就打了个电话给小红。
xm:这个证明题怎么做啊?
但是小红的作业中并没有这道题.
xh:你等我思考出来再告诉你。
小明听完后愉快地开机打游戏去了,约莫10分钟过去了,来电铃声突然想起,吓得小明手一抖就game over了,拿起手机一看,这不是小红嘛。
xh:这道题的解决方法我消息发给你了。
于是乎salty fish小明就这样写完了作业。

这一个过程呢,我们可以把小明看成class A,小红看成class B,A中定义了一个抽象方法,叫做证明矩阵正定,但是A没有实现它。于是交给了B,B实现了这个方法,但是B本身用不着,但是A要交作业啊,于是A 调用了B的这个实现方法。这个过程就是回调的一个过程。

回调机制

⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

回调意义

方法回调是功能定义和功能分离的一种手段,是一种松耦合的设计思想。在JAVA中回调是通过接口来实现的。作为一种系统架构,必须要有自己的运行环境,并且要提供用户的实现接口。
接口(系统框架)是系统提供的,接口的实现是用户实现的。这样可以达到接口统一,实现不同。系统通过在不同的状态“回调”我们的实现类,来达到接口和实现的分离。

接口回调的实现步骤

其实你会发现Android存在着大量回调

1.首先定义一个回调接口。(就是在Andorid Studio里面新建java,选择interface,or使用idea,这里使用idea,例子用小明,小红)

public interface CallBack {void solution(String answer);
}
  1. 小明发起帮助申请,小明不用实现接口方法的具体做法,他只需要暴露接口给小红,然后他接收答案。
public class XiaoMing{private String ans = null;//小明不知道答案public void callHelp(){System.out.println("小明: 美丽的小红,快把正定矩阵证明的过程答案给我看看。");}public void getAns(XiaoHong xh){xh.solution(ans);ans = xh.getAns();System.out.println("小明收到来自小红的回答: "+ans);}
}
  1. 小红实现证明过程
public class XiaoHong implements CallBack{private String ans;@Overridepublic void solution(String answer) {System.out.println("小红:证明过程是这样的。");ans = "咯叽咯叽咯叽咯叽咯叽咯叽";setAns(ans);System.out.println("小红: "+ans);}public String getAns(){return ans;}private void setAns(String ans){this.ans = ans;}
}
  1. 主函数调用
public class MyMain {public static void main(String[] args){XiaoHong xh = new XiaoHong();XiaoMing xm = new XiaoMing();//小明要问的人是小红System.out.println("小明开始给小红打电话寻求帮助...");xm.callHelp();//小明寻求帮助xm.getAns(xh);//小明得到答案}
}

1

参考

博客https://blog.csdn.net/u010566681/article/details/52371359

脚本之家
https://www.jb51.net/article/74194.htm

知乎:https://zhuanlan.zhihu.com/p/349951124


http://chatgpt.dhexx.cn/article/7hihY1fL.shtml

相关文章

接口回调与方法回调

1.1 接口回调 简介: 笔者查阅了大量资料,接口回调没有定义,可以理解为是一种设计思想。 其本质是将实现接口的类通过向上转型至接口类型,通过传入不同的子类,实现调用相应的子类重写的父类接口方法。 详情见&#xff…

Java接口回调详解

一.产生接口回调的场景 在现实生活中,产生接口回调的场景很简单,比如我主动叫你帮我做一件事,然后你做完这件事之后会通知我,"通知我"这个动作就是接口回调的动作.接口回调重在理解思就好.再举个例子用于下面的代码演示,老师让学生做课堂练习,学生做完练习后并告诉老…

java 接口回调的例子_java接口回调

java的接口回调原理网上已经有很多生动形象的例子说明了,在此总结一下个人的理解:类A调用类B的方法b(),类B再回调类A的方法a(),其中方法a()是定义在接口中的,由类A来实现。这是一个双向调用的过程,用下面的类图来加以说明。 Callback.png 1. 创建一个接口: public inter…

巧妙理解接口回调

接口回调目的和用法解析 一、为什么会有接口回调?什么是接口回调? 其实这两个问题是一个问题,知道了接口回调的原理自然就知道了为什么会有这么个东西。我们知道java中接口是不可以直接创建实例的,那么问题来了,假如…

[Java]什么是接口回调?

什么是接口回调? 1.接口回调是什么[2]? 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现…

自定义动画animate

开发工具与关键技术:VS,MVC 作者:陈梅 撰写时间:2019年6月2 日 所有代码来源与老师教学 这次分享一个好玩的自定义动画效果,这次还是用jQuery做出来的小功能。这次我们先直接看最后已经布局好的效果。 把所想写的内容…

Android自定义动画专题一

Android自定义动画 在目前的移动端产品中,不管是app还是网页一个好看酷炫的页面总是会第一时间吸引人的眼球,那么对于android开发人员来说,要想实现一个好看的页面必然需要掌握自定义控件以及自定义动画这门技术。 1.Android原生动画 Androi…

百度地图添加自定义图标标注以及自定义动画效果

百度地图添加自定义图标标注以及自定义动画效果 1、添加自定义图标标注2、添加自定义动画效果2.1、标注对象marker的构成2.2、自定义动画效果实现过程2.3、最终实现效果 上次写的是添加自定义图标,但是用的是添加自定义覆盖物方法,结果不支持点聚合&…

Vue中如何进行自定义动画与动画效果设计

Vue中如何进行自定义动画与动画效果设计 在Vue中,动画效果是非常有用的,它可以使用户界面变得更加生动、有趣,从而提高用户体验。Vue提供了一套非常方便的动画系统,使得我们可以非常容易地实现动画效果。 在本文中,我…

Android 自定义动画(实现类似分享动画)

最近在开发app中,要实现点击进入分享动画页面,然后照着每个Item的功能,来实现各自的功能 效果图如下: 首选自定义动画Activity import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import andr…

UE4 创建自定义动画节点

创建自定义动画节点需要两个类: 一个是您在编辑器中看到的图表节点 一个是真正在运行时工作的行为节点 动画图表节点,派生自:UAnimGraphNode_Base 例如:class UAnimGraphNode_SequencePlayer : public UAnimGraphNode_Base 动画…

ViewPager2添加自定义动画

此篇为ViewPager2的拓展篇,具体可查看ViewPager2的使用 ViewPager2自定义动画的核心是使用PageTransformer来实现,他是ViewPager2中的一个接口 原理 要显示非默认屏幕滑动动画,请实现 ViewPager2.PageTransformer 接口并将其提供给 ViewPa…

jQuery(五)--自定义动画、动画

目录 一、自定义动画 1.1 animate() 1.2 animate()动画执行顺序 1.3 animate()动画回调函数和匀速运动 1.4 animate动画之stop()/delay() 二、动画 2.1 show()/hide()/toggle() 2.2 slideDown()/slideUp()/slideToggle() 2.3 fadeIn()/fadeOut()/fadeTo()/fadeToggle(…

Android ProgressBar 自定义动画

源码地址&#xff1a; https://download.csdn.net/download/dreams_deng/12236355 1. 自定义圆形动画 1.1 布局 <!-- indeterminateDrawable 旋转图片indeterminateDuration 旋转速度--><ProgressBarandroid:id"id/pb_welcome_loading"android:layout_…

Qt自定义动画移动路径

在使用Qt实现动画时&#xff0c;一般使用QPropertyAnimation来实现&#xff0c;一般我们实现控件的移动动画都是走直线&#xff0c;我们如何实现自己想要的移动路径呢&#xff0c;比如走圆弧。下面介绍通过QPropertyAnimation实现自定义动画移动路径&#xff0c;比如走圆曲线、…

Flutter开发之——动画-自定义动画

一 为什么要进行自定义动画 当系统提供的动画不满足业务需求时&#xff0c;就需要我们自己进行自定义动画通过自定义动画&#xff0c;可以提高自定义组件的能力 二 自定义动画过程 继承StatefulWidget &#xff0c;完成动画界面的绘制setState 中动画执行及状态监听并刷新UId…

JQuery自定义动画——animate()学习

JQuery自定义动画——animate()学习 可以使 用animate 方法创建和实现自定义动画&#xff0c;animate() 方法通过执行 CSS 属性集的自定义动画&#xff0c;满足更多复杂多变的要求。 该方法通过CSS样式将元素从一个状态改变为另一个状态。即通过CSS属性值逐渐改变的&#xff0…

搞定动画之 JQuery 中的自定义动画

古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志——苏轼 写在前面 所谓的自定义动画就是通过 jQuery 提供的方法来完成我们自己想要的动画效果 animate()方法 jQuery 提供了 animate() 方法完成自定义动画效果&#xff0c;该方法具有两种用法。 用…

animate.css 自定义动画

在使用animate.css 的时候 动画的高度超过了预期的高度 在这种情况下肯定是过不了测试的&#xff0c;怎么办的&#xff1f; <div class"fold-div animated " :class"{slideInDown:foldDivHeightShow}" </div>上边代码可以知道 用的是 slideInDown…

JQuery中的animate自定义动画

animate()方法用于创建自定义动画。 概述 .animate( properties [, duration ] [, easing ] [, complete ] ) properties 类型: PlainObject 一个CSS属性和值的对象,动画将根据这组对象移动。 duration (默认: 400) 类型: Number or String 一个字符串或者数字决定动画将运…