Java 回调 (Callback) 接口学习使用
文章目录
- 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) 接口学习使用相关推荐
- android java 回调方法接口
常用用法:回调方法接口,向上转型动态绑定,常量接口. 回调方法接口: Java代码 public interface ICallback { public void func(); } publi ...
- java 回调(callback)函数简介.
一, 什么是回调函数(callback) 假如类A有1个方法a(), 但是它不知道什么时候调用这个方法a(). 而类B告诉类A, 我知道什么时候调用. 那么类A就把自己交给类B(作为类B的一个成 ...
- Java回调(callback)机制
一.简述 从软件模块之间的调用方式看,分为三类:同步调用.异步调用和回调. 1️⃣同步调用 同步调用是最基本并且最简单的一种调用方式,类 A 的 a() 调用类 B 的 b(),一直等待 b() 执行 ...
- Java集合——Map接口学习总结
一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...
- Java集合——List接口学习总结
一.ArrayList实现类 1. 常用方法 增加:add(int index, E element)删除:remove(int index) remove(Object o)修改:set(int i ...
- 多方法接口回调_啊?Java反射遇到接口
本文适合有点Java反射基础的同学,在Java反射调用方法时遇到接口参数是一件很蛋疼的事情. 在反射调用方法时需要传参数,像传递基本数据类型进去用就完事,传个对象进去怎么整都没关系,因为你在外部有对象 ...
- Java 回调函数Callback
参考:http://blog.csdn.net/fengyifei11228/article/details/5729445 http://kidult.iteye.com/blog/148982 所 ...
- Java回调的四种写法(反射、直接调用、接口调用、Lamda表达式)
1. 引言 在计算机程序设计中,回调函数,简称回调(Callback),是指通过函数参数传递到其他代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 以上是维基百科对&qu ...
- 学习 Java 8 - 函数式接口 Lambda
学习 Java 8 - 函数式接口 Java 8 引入了函数式接口的概念.函数式接口其实就是只包含一个抽象方法的普通 Java 接口.在没有引入函数式接口之前,我们通常使用内部类和匿名类来实现类似的功 ...
最新文章
- 3D视觉技术的6个问答
- python操作MariaDB
- “火震”太多打乱NASA计划,火星探测计划将推迟到2022年底
- springboot:thymeleaf
- VTK:Rendering之WalkCow
- Postman里如何把某个HTTP的请求和响应作为example保存
- 中国唯一一位女性 Apache Member 潘娟:我们还是要走出自己与众不同的 My Way
- 策略模式、观察者模式、代理模式、装饰模式 应用场景和实现
- 史上最容易理解————GET和POST两种基本请求方法的区别
- P2922 [USACO08DEC]秘密消息Secret Message
- 交通路标识别(毕业设计)
- Cell插件在J2EE系统中的应用
- 单龙芯3A3000-7A1000PMON研究学习-(25)撸起袖子干-再来一杯代码7
- 计算机cpu 显卡的作用是什么,显卡的作用是什么 显卡简介【图文详解】
- html 图片靠左浮动,float【css浮动】left靠左 right靠右属性图文教程
- [BUG 记录] Ubuntu下Tesla M40与其他N卡共存安装
- 2 位谷歌顶级程序员的激荡人生,曾共用 1 台电脑写代码
- ZBrush怎样快速雕刻出头发(一)
- (翻译)完成模式(Completion)
- Arduino实例2——快乐肥宅机
热门文章
- 短信微信等消息发送系统的架构设计
- CoreAnimation编程指南(十)KVC
- 现代程序设计 作业6 - 简单而有意义的题目
- html怎么给code标签添加语言,html code标签怎么用?html code标签的作用解释
- linux fg 命令,Linux fg 命令 command not found fg 命令详解 fg 命令未找到 fg 命令安装 - CommandNotFound ⚡️ 坑否...
- 台式机dp接口_精品导购:你想要的商务台式机 都在这里了!
- 自学Java必看的知识点,猿们怎么看?
- ios 图片居中裁剪_[ iOS Shortcuts / Workflow ] 分享一个给照片批量加「底部居中偏上」水印的捷径,可适应不同水印的尺寸...
- selinux= 为 disabled_安德里茨为巴西KLabin Puma II 项目提供气化炉和生物质处理线
- oracle to_char 数值,oracle to_char格式数值