文章目录

  • Java 回调 (Callback) 接口学习使用
    • 1.什么是回调(Callback)?
    • 2.Java代码示例
    • 2.直接调用
    • 3.接口调用
    • 4.Lambda表达式

推荐看我的InfoQ地址,界面排版更简洁

Java 回调 (Callback) 接口学习使用

1.什么是回调(Callback)?

回调函数,简称回调,是指通过函数参数传递到其他代码的某一块可执行代码的引用,这一设计允许了底层代码调用在高层定义的子程序。

简单来说:A调用了B的b()方法,那b方法如果包含对A中实现的逻辑的调用,这个过程就被称作回调。

2.Java代码示例


package callback;public class MQ {class Producer{public void send(String msg, MsgStateCallback msgStateCallback) {System.out.println("send msg :" + msg);int ACK = 1;if (ACK == 0){msgStateCallback.succ();}else {msgStateCallback.fail();}}}interface MsgStateCallback{void succ();void fail();}public static void main(String[] args) {MQ mq = new MQ();Producer producer = mq.new Producer();String msg = "my msg";producer.send(msg, new MsgStateCallback() {@Overridepublic void succ() {System.out.println("消息发送成功");}@Overridepublic void fail() {System.out.println("消息发送失败");}});}
}

2.直接调用

将参数改成Callback示例


package callback;public class DirectCallback {class Request{public void send(InvokeCallback.CallBack callBack) throws Exception {// 模拟等待响应Thread.sleep(3000);System.out.println("[Request]:收到响应");callBack.processResponse();}}public static void main(String[] args) throws InterruptedException {DirectCallback directCallback = new DirectCallback();final Request request = directCallback.new Request();System.out.println("发送请求");new Thread(new Runnable() {@Overridepublic void run() {try {request.send(new InvokeCallback.CallBack());} catch (Exception e) {e.printStackTrace();}}}).start();System.out.println("请求已经发送");Thread.sleep(10 * 1000);}}

3.接口调用

Callback作为接口传入参数

Java代码示例中就是接口调用方式!!!


package callback;import java.lang.reflect.Method;public class InterfaceCallback {class Request{public void send(ResponseCallback responseCallback) throws Exception {Thread.sleep(3000);responseCallback.processResponse();}}interface ResponseCallback{void processResponse();}public static void main(String[] args) throws InterruptedException {InterfaceCallback interfaceCallback = new InterfaceCallback();final Request request = interfaceCallback.new Request();System.out.println("发送请求");new Thread(new Runnable() {@Overridepublic void run() {try {request.send(new ResponseCallback() {@Overridepublic void processResponse() {System.out.println("收到响应");}});} catch (Exception e) {e.printStackTrace();}}}).start();System.out.println("请求已发送");Thread.sleep(10000);}}

4.Lambda表达式


package callback;import java.lang.reflect.Method;public class LambdaCallback {class Request{public void send(ResponseCallback responseCallback) throws Exception {Thread.sleep(3000);responseCallback.processResponse();}}interface ResponseCallback{void processResponse();}public static void main(String[] args) throws Exception {LambdaCallback lambdaCallback = new LambdaCallback();Request request = lambdaCallback.new Request();System.out.println("发送请求");new Thread(() -> {try {request.send(() -> System.out.println("处理响应"));} catch (Exception e) {e.printStackTrace();}} ).start();System.out.println("请求已发送");}}

参考博客:

https://juejin.im/post/6844904066129084429

http://gaocegege.com/Blog/java/java-callback

Java 回调 (Callback) 接口学习使用相关推荐

  1. android java 回调方法接口

    常用用法:回调方法接口,向上转型动态绑定,常量接口. 回调方法接口: Java代码 public interface ICallback { public void   func(); } publi ...

  2. java 回调(callback)函数简介.

    一, 什么是回调函数(callback) 假如类A有1个方法a(), 但是它不知道什么时候调用这个方法a(). 而类B告诉类A, 我知道什么时候调用.    那么类A就把自己交给类B(作为类B的一个成 ...

  3. Java回调(callback)机制

    一.简述 从软件模块之间的调用方式看,分为三类:同步调用.异步调用和回调. 1️⃣同步调用 同步调用是最基本并且最简单的一种调用方式,类 A 的 a() 调用类 B 的 b(),一直等待 b() 执行 ...

  4. Java集合——Map接口学习总结

    一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...

  5. Java集合——List接口学习总结

    一.ArrayList实现类 1. 常用方法 增加:add(int index, E element)删除:remove(int index) remove(Object o)修改:set(int i ...

  6. 多方法接口回调_啊?Java反射遇到接口

    本文适合有点Java反射基础的同学,在Java反射调用方法时遇到接口参数是一件很蛋疼的事情. 在反射调用方法时需要传参数,像传递基本数据类型进去用就完事,传个对象进去怎么整都没关系,因为你在外部有对象 ...

  7. Java 回调函数Callback

    参考:http://blog.csdn.net/fengyifei11228/article/details/5729445 http://kidult.iteye.com/blog/148982 所 ...

  8. Java回调的四种写法(反射、直接调用、接口调用、Lamda表达式)

    1. 引言 在计算机程序设计中,回调函数,简称回调(Callback),是指通过函数参数传递到其他代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 以上是维基百科对&qu ...

  9. 学习 Java 8 - 函数式接口 Lambda

    学习 Java 8 - 函数式接口 Java 8 引入了函数式接口的概念.函数式接口其实就是只包含一个抽象方法的普通 Java 接口.在没有引入函数式接口之前,我们通常使用内部类和匿名类来实现类似的功 ...

最新文章

  1. 3D视觉技术的6个问答
  2. python操作MariaDB
  3. “火震”太多打乱NASA计划,火星探测计划将推迟到2022年底
  4. springboot:thymeleaf
  5. VTK:Rendering之WalkCow
  6. Postman里如何把某个HTTP的请求和响应作为example保存
  7. 中国唯一一位女性 Apache Member 潘娟:我们还是要走出自己与众不同的 My Way
  8. 策略模式、观察者模式、代理模式、装饰模式 应用场景和实现
  9. 史上最容易理解————GET和POST两种基本请求方法的区别
  10. P2922 [USACO08DEC]秘密消息Secret Message
  11. 交通路标识别(毕业设计)
  12. Cell插件在J2EE系统中的应用
  13. 单龙芯3A3000-7A1000PMON研究学习-(25)撸起袖子干-再来一杯代码7
  14. 计算机cpu 显卡的作用是什么,显卡的作用是什么 显卡简介【图文详解】
  15. html 图片靠左浮动,float【css浮动】left靠左 right靠右属性图文教程
  16. [BUG 记录] Ubuntu下Tesla M40与其他N卡共存安装
  17. 2 位谷歌顶级程序员的激荡人生,曾共用 1 台电脑写代码
  18. ZBrush怎样快速雕刻出头发(一)
  19. (翻译)完成模式(Completion)
  20. Arduino实例2——快乐肥宅机

热门文章

  1. 短信微信等消息发送系统的架构设计
  2. CoreAnimation编程指南(十)KVC
  3. 现代程序设计 作业6 - 简单而有意义的题目
  4. html怎么给code标签添加语言,html code标签怎么用?html code标签的作用解释
  5. linux fg 命令,Linux fg 命令 command not found fg 命令详解 fg 命令未找到 fg 命令安装 - CommandNotFound ⚡️ 坑否...
  6. 台式机dp接口_精品导购:你想要的商务台式机 都在这里了!
  7. 自学Java必看的知识点,猿们怎么看?
  8. ios 图片居中裁剪_[ iOS Shortcuts / Workflow ] 分享一个给照片批量加「底部居中偏上」水印的捷径,可适应不同水印的尺寸...
  9. selinux= 为 disabled_安德里茨为巴西KLabin Puma II 项目提供气化炉和生物质处理线
  10. oracle to_char 数值,oracle to_char格式数值