一.产生接口回调的场景

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

二.什么是接口回调

在Java的层面简单的说一下接口回调:现有一个接口A,和它的实现类A1,和另外一个有接口A引用的类B,因为类B中有接口A的引用,在B执行完方法后,可以通过接口A的引用,告诉A执行完成了这个方法.由于A是一个接口,所以具体接收执行完成这个方法在它是实现类A1中体现.

三.在代码中的使用

以上面老师叫学生做课堂作业为例,我们先创建一个回调接口,以及用于接收学生做完课堂作业的消息

public interface BackInterface {void backMethod();}

然后定义一个实现类Teacher,功能是让学生做课堂练习,接收学生做完课堂练习的通知

public class Teacher implements BackInterface {//因为老师要告诉学生做课堂练习,所以这个传一个学生的引用private Student student;public Teacher(Student student){this.student = student;}//老师告诉学生做课堂练习public void doEvent(){System.out.println("老师让学生做练习...");student.doPractice(this);}//用于接收接口回调的消息@Overridepublic void backMethod() {System.out.println("老师接收到学生做完课堂练习的消息");}}

学生类,功能是做练习,做完之后并告诉老师(回调)

public class Student {//学生做课堂练习,并告诉老师public void doPractice(BackInterface BackInterface) {System.out.println("学生做练习...");System.out.println("学生告诉老师做完练习...");BackInterface.backMethod();}
}

进行测试:

public class BackDemo {public static void main(String[] args) {Teacher teacher = new Teacher(new Student());teacher.doEvent();}
}

结果:

我们可以看到回调完成.在实际开发过程中为了保证效率我们往往发布任务的时候会做成异步的,在本例中就是把 "老师让学生做课堂练习" 做成异步,具体实现很简单,就是新建一个线程就可以了,也就是把Teacher类中的 "student.doPractice(this);"代码改成下面的代码:

new Thread(new Runnable() {@Overridepublic void run() {}}).start();

还有就是为了代码的简洁,我们常常把Teacher类写成匿名内部类的形式,代码就不演示了
为了方便理解给几个参考地址:
https://blog.csdn.net/bfboys/article/details/52640587
https://blog.csdn.net/jonsnoww/article/details/68932292

Java接口回调详解相关推荐

  1. Java 接口基础详解,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  3. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  4. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  5. Java 动态代理详解 ( 附示例源码,建议收藏)

    动态代理在Java中有着广泛的应用,比如Spring AOP.Hibernate数据查询.测试框架的后端mock.RPC远程调用.Java注解对象获取.日志.用户鉴权.全局性异常处理.性能监控,甚至事 ...

  6. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  7. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  8. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  9. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

最新文章

  1. UA MATH563 概率论的数学基础 中心极限定理24 随机变量的特征函数
  2. 利用Word2010给汉字添加汉语拼音
  3. 配置和使用OCS 2007会议功能
  4. 商场楼层导视牌图片_百宝图商场电子导视软件中预约产品功能简介
  5. 快速导入十亿数据到hugegraph图数据库
  6. 数字电路与系统(第三版)答案 戚金清 王兢
  7. python系列教程158——iter函数
  8. AFX_MANAGE_STATE(AfxGetStaticModuleState())
  9. 运维工程师的日常工作内容
  10. 使用python框架Django搭建web应用
  11. 微信小程序利息计算器
  12. php 实现二叉树的最大深度_PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)...
  13. IDEA的修改背景照片and使用技巧
  14. 液晶屏循环显示单色 液晶屏检测程序
  15. ROS Navigation-----map_server包缺少Error: package 'map_server' not found
  16. oracle的读写分离实现
  17. Visual Studio Code(VS code) python代码无法进行变量和函数跳转
  18. MSP和CMP定义入门
  19. python如何做ui_python写ui
  20. 华为交换机访问控制策略

热门文章

  1. weui和jquery weui关系
  2. php生成二维码工具(带LOGO)
  3. Extjs6.2.0搭建项目框架
  4. CAS算法AtomicInteger
  5. CPU 和 GPU 的区别是什么
  6. bfgs算法 matlab,BFGS算法的最优化问题及在MATLAB中的实现
  7. 拟牛顿法之BFGS算法
  8. 社会工程学属于计算机吗,对社会工程学的通俗理解 -电脑资料
  9. ★多情自古伤离别,更那堪冷落清秋节……^^(
  10. Faster-R-CNN算法理解