最近写android的蓝牙扫描功能的时候用到回调函数
虽然以前也接触过(如鼠标点击事件之类的),但是一直没太注意,今天决定研究一波。
先说说自己对回调函数的理解,打个比方:
现在有两个人,小问和小答。小问有个数学题不知道怎么算,但是小答的数学很厉害,然后小问准备去请教小答。
- 小问去问小答“99+1=?”;
- 小答说“我先算一算,算好了我再用短信发给你”;
- 小答算完后,给小问发短信“答案是100”;
来理解一下就是:A要求B去做某些事情,然后B在做完这件事情之后,通知A自己已经做完了。(“B通知A”的这个过程就是回调)
下面来用代码演示一下:
小问是类 Asker,小答是类 Answer。回调接口就是CallBack
Asker中有一个方法ask(Answer answer, String question);
//小问向小答提问
public void ask(Answer answer, String question) {
//小答解决问题
answer.solve(Asker.this, question);
}
Answer中有一个方法solve(CallBack callBack, String question);
public void solve(CallBack callBack, String question) {
//小答解决完问题后,发短信告诉小问
callBack.callBack("10");
}
CallBack是一个接口里面;
public interface CallBack {
void callBack(String result);
}
源代码:
test类:
/**
* Created by zf on 2017/6/10.
*/
public class test {
public static void main(String[] args) {
String question = "9+1=?";//问题
Asker asker = new Asker();//小问
Answer answer = new Answer();//小答
asker.ask(answer, question);//小问向小答提问
}
}
Asker类:
/**
* Created by zf on 2017/6/9.
*/
public class Asker implements CallBack{
//小问向小答提问
public void ask(Answer answer, String question) {
//小答解决问题
answer.solve(Asker.this, question);
}
@Override
public void callBack(String result) {
System.out.println("答案是"+result);
}
}
Answer类:
/**
* Created by zf on 2017/6/9.
*/
public class Answer {
public void solve(CallBack callBack, String question) {
//小答解决完问题后,发短信告诉小问
callBack.callBack("10");
}
}
CallBack接口:
/**
* Created by zf on 2017/6/9.
*/
public interface CallBack {
void callBack(String result);
}