您的位置:首页 > 编程语言 > Java开发

Java回调机制分析

2016-07-28 13:33 399 查看
在安卓学习过程中经常听到回调函数,也经常用到回调函数,但只是有这个概念,并不清楚具体回调函数的运行机制。网上看了许多博客,大都采用代码分析。这里我们采用代码结合图例进行分析讲解。

先来看下回调的含义。就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。反正这说法我也看的模糊。

那我们在来看个通俗点的说法。有一天老王遇到一个很难的问题,问题是“1 + 1 = ?”,就打电话问小李,小李一下子也不知道,就跟老王说,等我办完手上的事情,就去想想答案,老王也不会傻傻的拿着电话去等小李的答案吧,于是老王就对小李说,我还要去逛街,你知道了答案就打我电话告诉我,于是挂了电话,自己办自己的事情,过了一个小时,小李打了老王的电话,告诉他答案是2。
这个例子很形象的说明了回调的作用。那么我们结合代码来分析下回调的过程。

我们先定义个接口。用于回调,用于答复问题。


public interface callback {
public void reply(String str);
}


老王要问小李个问题。


public class Wang implements callback{

//老王要和小李联系,持有小李的对象.
private Li li;

public Wang(Li li) {
this.li = li;
}

public void askQuestion(final String question){
new Thread(){
@Override
public void run() {
//注册回调接口(老王讲自身的接口和问题传入,等待答复)
li.executeMessage(Wang.this, question);
}
}.start();
}

@Override
public void reply(String str) {
//等待回复的结果.小李会利用这个方法来回复
System.out.println(str);
}

}


小李利用接口回调回答老王问题。


public class Li {

public void executeMessage(callback call,String  question){
System.out.println(question);
//根据老王传入的接口,调用老王的reply方法对老王的问题进行回复。
call.reply("小李:老王你个逗逼1+1=2");
}
}


测试方法


public class Main {
public static void main(String[] args) {
Li li = new Li();
Wang w = new Wang(li);
w.askQuestion("老王:小李我问你个问题:1+1=?");
}
}


测试结果


老王:小李我问你个问题:1+1=?
小李:老王你个逗逼1+1=2


看完代码相信你应该已经明白了大半,如果还不明白我们在结合图例来进行分析一下。



看完这个图片相信你应该能明白这个整个的流程,老王和小李其实是借助这个接口进行通讯。

这篇文章参考了xiaanming的博客,对其进行了简化以方便初学者理解回调机制的流程。(http://blog.csdn.net/xiaanming/article/details/17483273
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 函数 代码分析