Java--回调接口
回调接口:
我们都知道,一个线程在运行中,遇到一个耗时操作(方法)时,会开启另外一个线程,即所谓 -- 异步 。java中 回调接口 也必然应用与异步加载。 所谓 回调接口 ,也就是线程运行中 遇到一个耗时操作(方法),开启一个子线程,在子线程中将该操作(方法)交给
另外一个对象去完成。而被交付完成任务的对象,执行操作完毕之后,需要把信息回传给原对象。这种时候就必须使用 回调接口 技术。也就是网上流传的方法,A 调用 B 的 c 方法(为了获取 (所需要知道的) 信息),B 再反过来调用 A 的 d 方法(为了传达(A想要知道的)信
息)。而那个 d 方法 (也就是接口的实现方法) 被称为 回调方法。
即实现回调方法的要素为:
1、A 类 要将 B 类 作为它的成员变量,并且引用。(构造方法初始化时加载B)
2、B 类需要定义一个接口,然后在 把信息回传给 A类 的方法中,把接口作为参数传递过去,然后实现接口的抽象方法,把 A 想知道的信息传入。
3、A 在调用 上述(红色)方法 时,必须实现该接口的方法。也就是 回调方法。完成通信。
代码如下:
- //小明类 --> 他有一个问题需要询问老王。
- public class XiaoMing implements CallBack {
- // 1、将老王类声明为他的成员变量
- LaoWang laoWang;
- // 小明的构造方法,用来对老王的引用
- public XiaoMing(LaoWang laoWang) {
- this.laoWang = laoWang;
- }
- // 向老王问问题 (耗时操作)
- public void askQuestion(String question) {
- // 开启线程
- new Thread(new Runnable() {
- @Override
- public void run() {
- // 调用老王的方法 来获取答案。
- laoWang.solve(XiaoMing.this, question);
- }
- }).start();
- //问完问题,小明可以去干其他的,也就是(异步)
- play();
- }
- public void play(){
- System.out.println("我去玩耍了...");
- }
- // 回调方法 result --> 就是老王传过来的答案
- @Override
- public void callback(String result) {
- System.out.println(result);
- }
- }
- //老王类 --> 他有帮小明解决问题的能力(方法)
- public class LaoWang {
- //这是解决问题的方法,必须要将接口作为你的参数传递过去
- public void solve(CallBack callback,String question){
- System.out.println("小明问的问题是--->"+ question);
- //模拟老王解决问题所花费的时间
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- String result = "答案是2";
- //把答案传入接口的参数
- callback.callback(result);
- }
- //当你解决完问题以后,必须要定义一个接口,来将你的答案回复给小明。
- //否则小明无法接收你的答案。
- public interface CallBack{
- void callback(String result);
- }
- }
- //测试类
- public class Test {
- public static void main(String[] args) {
- LaoWang laoWang = new LaoWang();
- XiaoMing xiaoMing = new XiaoMing(laoWang);
- //小明问的问题
- xiaoMing.askQuestion("1+1=?");
- }
- }
Java--回调接口的更多相关文章
- JAVA回调接口的理解
A类持有B接口的对象引用,B接口有一个callBack()方法,C类是B类的实现类,实现了callBack()方法,把C类传入A类,当A类执行完操作后调用callBack()方法,这时候A调用的就是C ...
- Java回调方法详解
回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...
- 【java回调】java两个类之间的回调函数传递
背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...
- JAVA回调机制和观察者模式实例分享
回调函数在JAVA中使用频繁,比如Swing可视化编码中的监听事件等等,一般回调函数都是,通过某一个方法的执行,自动调用回调对象的回调方法,比如,有一个接口,里面有一个方法onNotify(),这个方 ...
- 深入浅出: Java回调机制(异步)
一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...
- Java回调函数
维基百科上的定义:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 所谓回调,就是客户程序C调用服务程 ...
- Android回调接口的写法
方法一: 定义一个接口,里面写想要对外提供的方法,在逻辑层方法的参数里传递进去,让在需要的时候调接口里的方法. 实例一: public class SmsUtils { public interfac ...
- Java回调实现
一.回调的形式 1. C.C++和Pascal允许将函数指针作为参数传递给其它函数.JavaScript,Python,和PHP允许简单的将函数名作为参数传递. 2. .NET Framework的语 ...
- 浅谈Java回调机制
像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...
- Java 回调函数
下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...
随机推荐
- Sampling Distributions and Central Limit Theorem in R(转)
The Central Limit Theorem (CLT), and the concept of the sampling distribution, are critical for unde ...
- 一个html页面传入参数到另一个html页面用js获取方法
没错使用以下函数就能够完整的获取到路径里的你想要的参数:function getURLParameter(name) { return decodeURIComponent((new RegExp(' ...
- poi jsp xls
poi jsp xls <%@ page language="java" pageEncoding="UTF-8"import="java.ut ...
- xampp教程(一):xampp下载,安装,配置,运行PHP的web项目
本来没有想着弄PHP,但是有同学叫我帮忙启动一下一个PHP写的后台.着实需要去学习一下. 想着安装xampp软件,一个集合了多个服务器,多个数据库,多个后台语言的管理软件. 一.xampp下载 二.安 ...
- WebSocket+MSE——HTML5 直播技术解析
作者 | 刘博(又拍云多媒体开发工程师) 当前为了满足比较火热的移动 Web 端直播需求,一系列的 HTML5 直播技术迅速的发展起来. 常见的可用于 HTML5 的直播技术有 HLS.WebSock ...
- 容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)
前面讨论了如何运行容器,本节学习容器的其他常用操作. stop/start/restart 容器 通过 docker stop 可以停止运行的容器. 容器在 docker host 中实际上是一个进程 ...
- python基础操作_文件读写操作
#文件读写# r只能读不能写,且文件必须存在,w只能写不能读,a只能写不能读# w+是写读模式,清空原文件内容# r+是读写模式,没有清空原文件内容,# 只要有r,文件必须存在,只要有w,都会清空原文 ...
- Python: Pandas的DataFrame如何按指定list排序
本文首发于微信公众号“Python数据之道”(ID:PyDataRoad) 前言 写这篇文章的起由是有一天微信上一位朋友问到一个问题,问题大体意思概述如下: 现在有一个pandas的Series和一个 ...
- bootstrap中的下拉菜单
下拉菜单必要的代码: <div class="container"> <div class="dropdown"> <butt ...
- Mac 上Python多版本切换
Mac上自带了Python2.x的版本,有时需要使用Python3.x版本做开发,但不能删了Python2.x,可能引起系统不稳定,那么就需要安装多个版本的Python. 1.安装Python3.x版 ...