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 的逻辑