JAVA回调机制解析
Posted 桀骜不驯24
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA回调机制解析相关的知识,希望对你有一定的参考价值。
一、回调机制概述
回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走。俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!
回调机制是什么?其实回调机制一直在我们身边存在着,只是我们习惯了存在就未曾察觉,懂得其原理就很简单了。
先打个比方,设置场景如下,教师,成绩差学生A,成绩好学生B,详细步骤如下:
(1)教师让学生A计算 一道题目 a+b=?
(2)学生A苦于技能cd(臣妾做不到),不会计算,请求学生B帮忙完成
(3)学生B根据学生A告诉他的 a和b的值计算出最后的答案,然后传给学生A
(4)学生A得知到计算的答案,欢喜地告诉教师
二、实现代码解析
(1)先定义一个统一的接口
public interface CallBack { public void solve(int result); }
(2)Class A的实现
尤其注意的是,StudentA初始化时,需要传入StudentB的对象,方便在请求帮助的时候有指定的对象
public class StudentA implements CallBack{ private StudentB mStuB; public StudentA(StudentB mStuB){ this.mStuB = mStuB; } public void askQuestion(final int a,final int b){ new Thread(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub mStuB.executeMessage(StudentA.this, a, b); } }).start(); } @Override public void solve(int result) { // TODO Auto-generated method stub System.out.println(result); } }
(3)Class B的实现
public class StudentB { public void executeMessage(CallBack callBack,int a,int b){ System.out.println("A的问题是:"+a +" + "+ b+"=?"); int result = a + b; callBack.solve(result); } }
(4)值的初始化
public class CallBackTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a = 1; int b = 1; StudentB mStuB = new StudentB(); StudentA mStuA = new StudentA(mStuB); mStuA.askQuestion(a,b); } }
三、总结
参考网上经典的诠释如下:
- Class A实现接口CallBack callback——背景1
public Class StudentA implements CallBack
- Class A中包含一个class B的引用b ——背景2
Student A初始化的时候,传入Student B的对象 mStuB,便于在执行askQuestion方法时,有指向的mStuB对象
- class B有一个参数为callback的方法f(CallBack callback) ——背景3
Student B在执行完请求后,需要回调告知StudentA,故需要通过callback变量来传递,使用了父类引用指向子类对象
- A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
mStuA.askQuestion(a,b) -> mStuB.executeMessage(StudentA.this, a, b)
- 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D
executeMessage() -> callBack.solve(result) (父类引用指向子类对象)
四、相关推荐
http://blog.csdn.net/xiaanming/article/details/8703708/
以上是关于JAVA回调机制解析的主要内容,如果未能解决你的问题,请参考以下文章