秒懂Java回调函数

最近写android的蓝牙扫描功能的时候用到回调函数

虽然以前也接触过(如鼠标点击事件之类的),但是一直没太注意,今天决定研究一波。


先说说自己对回调函数的理解,打个比方:

现在有两个人,小问和小答。小问有个数学题不知道怎么算,但是小答的数学很厉害,然后小问准备去请教小答。

  1. 小问去问小答“99+1=?”;
  2. 小答说“我先算一算,算好了我再用短信发给你”;
  3. 小答算完后,给小问发短信“答案是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);

}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值