回调接口:

  我们都知道,一个线程在运行中,遇到一个耗时操作(方法)时,会开启另外一个线程,即所谓 -- 异步 。java中 回调接口 也必然应用与异步加载。 所谓 回调接口 ,也就是线程运行中 遇到一个耗时操作(方法),开启一个子线程,在子线程中将该操作(方法)交给

另外一个对象去完成。而被交付完成任务的对象,执行操作完毕之后,需要把信息回传给原对象。这种时候就必须使用 回调接口 技术。也就是网上流传的方法,A 调用 B 的 c 方法(为了获取 (所需要知道的) 信息),B 再反过来调用 A 的 d 方法(为了传达(A想要知道的)信

息)。而那个 d 方法 (也就是接口的实现方法) 被称为 回调方法

  即实现回调方法的要素为:

    1、A 类 要将 B 类 作为它的成员变量,并且引用。(构造方法初始化时加载B)

    2、B 类需要定义一个接口,然后在 把信息回传给 A类 的方法中,把接口作为参数传递过去,然后实现接口的抽象方法,把 A 想知道的信息传入。

    3、A 在调用 上述(红色)方法 时,必须实现该接口的方法。也就是 回调方法。完成通信。

代码如下:

  1. //小明类 --> 他有一个问题需要询问老王。
  2. public class XiaoMing implements CallBack {
  3.  
  4. // 1、将老王类声明为他的成员变量
  5. LaoWang laoWang;
  6.  
  7. // 小明的构造方法,用来对老王的引用
  8. public XiaoMing(LaoWang laoWang) {
  9. this.laoWang = laoWang;
  10. }
  11.  
  12. // 向老王问问题 (耗时操作)
  13. public void askQuestion(String question) {
  14.  
  15. // 开启线程
  16. new Thread(new Runnable() {
  17.  
  18. @Override
  19. public void run() {
  20.  
  21. // 调用老王的方法 来获取答案。
  22. laoWang.solve(XiaoMing.this, question);
  23.  
  24. }
  25. }).start();
  26.  
  27. //问完问题,小明可以去干其他的,也就是(异步)
  28. play();
  29. }
  30.  
  31. public void play(){
  32. System.out.println("我去玩耍了...");
  33. }
  34.  
  35. // 回调方法 result --> 就是老王传过来的答案
  36. @Override
  37. public void callback(String result) {
  38. System.out.println(result);
  39. }
  40.  
  41. }
  1. //老王类 --> 他有帮小明解决问题的能力(方法)
  2. public class LaoWang {
  3.  
  4. //这是解决问题的方法,必须要将接口作为你的参数传递过去
  5. public void solve(CallBack callback,String question){
  6.  
  7. System.out.println("小明问的问题是--->"+ question);
  8.  
  9. //模拟老王解决问题所花费的时间
  10. try {
  11. Thread.sleep(3000);
  12. } catch (InterruptedException e) {
  13. e.printStackTrace();
  14. }
  15.  
  16. String result = "答案是2";
  17.  
  18. //把答案传入接口的参数
  19. callback.callback(result);
  20. }
  21.  
  22. //当你解决完问题以后,必须要定义一个接口,来将你的答案回复给小明。
  23. //否则小明无法接收你的答案。
  24. public interface CallBack{
  25. void callback(String result);
  26. }
  27. }
  1. //测试类
  2. public class Test {
  3.  
  4. public static void main(String[] args) {
  5.  
  6. LaoWang laoWang = new LaoWang();
  7.  
  8. XiaoMing xiaoMing = new XiaoMing(laoWang);
  9.  
  10. //小明问的问题
  11. xiaoMing.askQuestion("1+1=?");
  12. }
  13.  
  14. }

Java--回调接口的更多相关文章

  1. JAVA回调接口的理解

    A类持有B接口的对象引用,B接口有一个callBack()方法,C类是B类的实现类,实现了callBack()方法,把C类传入A类,当A类执行完操作后调用callBack()方法,这时候A调用的就是C ...

  2. Java回调方法详解

    回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...

  3. 【java回调】java两个类之间的回调函数传递

    背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...

  4. JAVA回调机制和观察者模式实例分享

    回调函数在JAVA中使用频繁,比如Swing可视化编码中的监听事件等等,一般回调函数都是,通过某一个方法的执行,自动调用回调对象的回调方法,比如,有一个接口,里面有一个方法onNotify(),这个方 ...

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

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

  6. Java回调函数

    维基百科上的定义:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 所谓回调,就是客户程序C调用服务程 ...

  7. Android回调接口的写法

    方法一: 定义一个接口,里面写想要对外提供的方法,在逻辑层方法的参数里传递进去,让在需要的时候调接口里的方法. 实例一: public class SmsUtils { public interfac ...

  8. Java回调实现

    一.回调的形式 1. C.C++和Pascal允许将函数指针作为参数传递给其它函数.JavaScript,Python,和PHP允许简单的将函数名作为参数传递. 2. .NET Framework的语 ...

  9. 浅谈Java回调机制

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

  10. Java 回调函数

    下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...

随机推荐

  1. Sampling Distributions and Central Limit Theorem in R(转)

    The Central Limit Theorem (CLT), and the concept of the sampling distribution, are critical for unde ...

  2. 一个html页面传入参数到另一个html页面用js获取方法

    没错使用以下函数就能够完整的获取到路径里的你想要的参数:function getURLParameter(name) { return decodeURIComponent((new RegExp(' ...

  3. poi jsp xls

    poi jsp xls <%@ page language="java" pageEncoding="UTF-8"import="java.ut ...

  4. xampp教程(一):xampp下载,安装,配置,运行PHP的web项目

    本来没有想着弄PHP,但是有同学叫我帮忙启动一下一个PHP写的后台.着实需要去学习一下. 想着安装xampp软件,一个集合了多个服务器,多个数据库,多个后台语言的管理软件. 一.xampp下载 二.安 ...

  5. WebSocket+MSE——HTML5 直播技术解析

    作者 | 刘博(又拍云多媒体开发工程师) 当前为了满足比较火热的移动 Web 端直播需求,一系列的 HTML5 直播技术迅速的发展起来. 常见的可用于 HTML5 的直播技术有 HLS.WebSock ...

  6. 容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

    前面讨论了如何运行容器,本节学习容器的其他常用操作. stop/start/restart 容器 通过 docker stop 可以停止运行的容器. 容器在 docker host 中实际上是一个进程 ...

  7. python基础操作_文件读写操作

    #文件读写# r只能读不能写,且文件必须存在,w只能写不能读,a只能写不能读# w+是写读模式,清空原文件内容# r+是读写模式,没有清空原文件内容,# 只要有r,文件必须存在,只要有w,都会清空原文 ...

  8. Python: Pandas的DataFrame如何按指定list排序

    本文首发于微信公众号“Python数据之道”(ID:PyDataRoad) 前言 写这篇文章的起由是有一天微信上一位朋友问到一个问题,问题大体意思概述如下: 现在有一个pandas的Series和一个 ...

  9. bootstrap中的下拉菜单

    下拉菜单必要的代码: <div  class="container"> <div  class="dropdown"> <butt ...

  10. Mac 上Python多版本切换

    Mac上自带了Python2.x的版本,有时需要使用Python3.x版本做开发,但不能删了Python2.x,可能引起系统不稳定,那么就需要安装多个版本的Python. 1.安装Python3.x版 ...