南通单位网站建设,南通高端网站建设公司,wordpress iphoto主题,网站开发系统设计怎么写文章目录Java 回调 (Callback) 接口学习使用1.什么是回调(Callback)#xff1f;2.Java代码示例2.直接调用3.接口调用4.Lambda表达式推荐看我的InfoQ地址#xff0c;界面排版更简洁Java 回调 (Callback) 接口学习使用
1.什么是回调(Callback)#xff1f; 回调函数#xff0…
文章目录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