java 回调机制

本贴最后更新于 2999 天前,其中的信息可能已经天翻地覆

在很多 java 源码中,经常能看得到接口回调,这个接口回调到底是几个意思呢,根据如下问题,通过详细的查询并学习文档,才搞明白这个回调是几个意思,写在这里做个备份 #

基于我对接口回调的理解,做了如下的场景说明:

1、A、B 2 个人 都很忙

2、A 给 B 打电话问问题 , A 问完了问题以后就挂了电话,但是 B 不能及时回复 A ,等 B 能够回复的时候,需要去调用 A 的方法

A 对象

// 回调接口 interface CallBack{ // 回调函数 public void solve(String result); } class A implements CallBack{ // A要询问B,所以A必须持有B对象 private B b; public A(B b) { this.b = b; } // 异步回调 public void askBQuestion(final String question){ new Thread(new Runnable() { public void run() { // 调用B的方法 b.execute(A.this, question); } }).start(); System.out.println("1.A问B:"+question+",A问完了问题,然后就挂了电话,做别的事情去了"); } @Override public void solve(String result) { System.out.println("3.B告诉A的"+result); } }

B 对象

class B{ public void execute(CallBack callBack,String question){ System.out.println("2.B收到了"+question+",但是B在忙,没能及时回复A,过了一会"); // 模拟B在忙,不能及时回复 for (int i = 0; i < 10000; i++) {} // B给A打电话,告诉结果[B调用了A中的方法] callBack.solve("结果是1+1=2"); } }

测试

public class InterfaceCallDemo { public static void main(String[] args) { // 打电话demo,异步回调 B b = new B(); // A 对象需要调用B对象 A a = new A(b); a.askBQuestion("1+1=?"); } }

场景结果可能有差异,因为不是一个线程在跑,可能出现抢占资源的情况

基于以上的场景在来模拟安卓的事件调用

主界面

// 模拟主界面 class Activity{ public void testClickEvent(){ View btn = new View("terry"); //调用B方法 btn.setmOnClick(new View.OnClick() { @Override public void fun(String result) { System.out.println("4.Button的点击事件成功,获得了内容:"+result); } }); } }

View

// 模拟view @SuppressWarnings("all") class View { private String text; public void setText(String text) { this.text = text; } public View(String text) { this.text = text; } // 回调接口和回调方法 public interface OnClick{ void fun(String result ); } private OnClick mOnClick; public void setmOnClick(OnClick mOnClick) { this.mOnClick = mOnClick; // 模拟点击事件 if(null != mOnClick){ // 同步 mOnClick.fun(this.text); } } }

测试

public class InterfaceCallDemo { public static void main(String[] args) { // 模拟android.OnCLick 同步回调 Activity activity = new Activity(); activity.testClickEvent(); } }

查看结果

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...