Java 回调 (Callback) 接口学习使用
生活随笔
收集整理的這篇文章主要介紹了
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) 接口学习使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 维度建模工具
- 下一篇: java美元兑换,(Java实现) 美元