1.對象回調:
對象回調原始寫法,A調B B又回頭調A
package com.ldj.demo.controller;/*** User: ldj* Date: 2025/6/28* Time: 12:22* Description: 回調函數的理解 對象回調*/
public class Tr {public static void main(String[] args) {A a = new A();B b = new B(a);a.ma(b);}
}// 老板
class A {public void ma(B b) {System.out.println("苦力強幫我扛袋米");b.mb();}public void onTaskCompleted(String result) {System.out.println("這是我的大" + result);}
}// 苦力強
class B {private A a;B(A a) {this.a = a;}public void mb() {System.out.println("好的老板");System.out.println("米已經送上樓了");a.onTaskCompleted("米");}
}
對象回調引入中間對象Callable?
package com.ldj.demo.controller;/*** User: ldj* Date: 2025/6/28* Time: 12:22* Description: 回調函數的理解 對象回調*/
public class Tr {public static void main(String[] args) {A a = new A();B b = new B();a.ma(b);}
}// A既當老板又當秘書
class A implements Callback{public void ma(B b) {System.out.println("苦力強幫我扛袋米");b.mb(this);}@Overridepublic void onTaskCompleted(String result) {System.out.println("A處理B結果:哇!是我的大" + result.charAt(0));}
}// 苦力強
class B {public void mb(Callback callback) {System.out.println("好的老板");System.out.println("米已經送上樓了");callback.onTaskCompleted("米");}
}// 秘書
@FunctionalInterface
interface Callback {void onTaskCompleted(String result);
}
2.函數回調:
package com.ldj.demo.controller;/*** User: ldj* Date: 2025/6/28* Time: 12:22* Description: 函數回調*/
public class Tr {public static void main(String[] args) {A a = new A();B b = new B();a.ma(b);}
}// 老板交代秘書
class A {public void ma(B b) {System.out.println("苦力強幫我扛袋米");// 函數式對象(秘書)b.mb( result -> {System.out.println("C處理B結果:這是老板的大" + result.charAt(0));});}}// 苦力強
class B {public void mb(Callback callback) {System.out.println("好的老板");System.out.println("米已經送上樓了");callback.onTaskCompleted("米");}
}// 秘書
@FunctionalInterface
interface Callback {void onTaskCompleted(String result);
}
總結:
1. 對象回調寫法相比函數式寫法更加符合人的直線思維。
在實際開發中,每個類都是分別定義在不同文件,看完A 的邏輯后,就跳到B 類看函數式方法傳了什么參數,完后又要跳回A看具體的實現邏輯,這種來回跳轉頁面操作,很有可能把你繞暈,我到底是在看A 的邏輯還是B 的邏輯