一、回调机制概述

    回调机制在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回调机制解析的更多相关文章

  1. java回调机制及其实现(转)

    1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...

  2. Java回调机制总结

    调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...

  3. 转 Java Classloader机制解析

    转 Java Classloader机制解析 发表于11个月前(2014-05-09 11:36)   阅读(693) | 评论(0) 9人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点 ...

  4. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  5. JAVA回调机制(CallBack)详解

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  6. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...

  7. JAVA 回调机制(callback)

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  8. 浅谈Java回调机制

    像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...

  9. Java基础9:解读Java回调机制

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

随机推荐

  1. [虾扯蛋] android界面框架-Window

    从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等.下面就以这几个类为出发点来概览下安卓开发的"界面架构&quo ...

  2. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  3. Python高手之路【四】python函数装饰器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

  4. TODO:搭建Laravel VueJS SemanticUI

    TODO:搭建Laravel VueJS SemanticUI Laravel是一套简洁.优雅的PHP开发框架(PHP Web Framework).可以让你从面条一样杂乱的代码中解脱出来:它可以帮你 ...

  5. iOS开源项目周报0105

    由OpenDigg 出品的iOS开源项目周报第四期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. He ...

  6. xpath提取多个标签下的text

    title: xpath提取多个标签下的text author: 青南 date: 2015-01-17 16:01:07 categories: [Python] tags: [xpath,Pyth ...

  7. [原]分享一下我和MongoDB与Redis那些事

    缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...

  8. jQuery的属性

    The Write Less , Do More ! jQuery的属性 1. attr(name|properties|key,value|fn) : 设置或返回被选元素的属性值 ①获取属性 < ...

  9. 为Xamarin更好的开发而改写的库

    欢迎大家加入以下开源社区 Xamarin-Cn:https://github.com/Xamarin-Cn Mvvmcross-Cn:https://github.com/Mvvmcross-Cn  ...

  10. 一步步开发自己的博客 .NET版(1、基本显示)

    前言 我们每个猿都有一个搭建自己独立博客的梦,我也不例外.以前想 现在想 以后也想.之所以一直迟迟没有着手,是因为难以跨出第一步.每次心里想着,等我以后技术好了再说,然后就没有然后了.以前用过word ...