在很多 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();
}
}
查看结果
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于