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=?");
    }

}
时间: 2024-10-29 00:13:35

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

JAVA回调接口的理解

A类持有B接口的对象引用,B接口有一个callBack()方法,C类是B类的实现类,实现了callBack()方法,把C类传入A类,当A类执行完操作后调用callBack()方法,这时候A调用的就是C类callBack()方法,相当于通知了C“我的操作完成了”,我们只要在C类的callBack()方法写处理就可以了,这就是回调.理解不难,多写写就可以了! 1 public interface B { 2 public void cllBack(String result); 3 } 4 publ

java回调机制(写的很好)

以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式: Class A实现接口CallBack callback——背景1 class A中包含一个class B的引用b ——背景2 class B有一个参数为call

Java回调函数详解

为了了解什么是回调函数,在网上查阅了如下资料,整理如下: 资料一: 首先说说什么叫回调函数? 在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调.在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃. 这样的解释似乎还是比较难懂,这里举个简 单的例子: 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程

一个简单的java回调函数的实现

回调函数 回调函数涉及的3个函数 登记回调函数 回调函数 响应回调函数 简单的解释 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件.回答完毕.来自知乎点击打开链接 代码的实现 首先有一个接口 interface CallB

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

以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式: Class A实现接口CallBack callback--背景1 class A中包含一个class B的引用b --背景2 class B有一个参数为call

Java回调机制解析

模块之间总是存在着一定的接口,从接口调用方式上看,可以分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,也是我们在写程序中经常使用的:回调是一种双向的调用模式,也就是说,被调用的接口被调用的同时也会调用对方的接口,这句话可能有点绕,等文章后面举例说明:异步调用是一种类似消息或事件的机制,解决了同步阻塞的问题,举例来讲:A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等到B走完后,A才继续走.回调是异步的基本,因此下面着重说回调机制. 我们暂且不讨论回调的一些

17.回调接口

方法一: 定义一个接口,里面写想要对外提供的方法,在逻辑层方法的参数里传递进去,让在需要的时候调接口里的方法. 实例一: public class SmsUtils { public interface BackUpCallBack{ /** * 短信调用前调用的方法 */ public void beforeSmsBackup(int total); /** * 短信备份中调用的方法 * @param progress 当前备份的进度. */ public void onSmsBackup(i

一个例子教你理解java回调机制

网上很多例子都写的很难理解,笔者刚开始都已经弄晕菜了. 这个例子,应该是再简单,再简洁不过的了,例子目的是测试某个方法的执行时间.这里就写三个java类,一个接口,一个实现,还有一个用于测试时间的类. 要测试的方法,尽量占用执行的时间,这样明显一些,这里测试循环1000000次,并且打印出来. 测试类: public class MyMethod { public void mytest() { // TODO Auto-generated method stub for (int i = 0;

Java 回调函数

回调函数 我对回调函数的理解 假设: 我的车在家里,现在已经坏了,我打电话给万能的维修工,我告诉他,嘿!哥来帮我修一下我的车吧!但是,维修工告诉我没有现在空闲,等有空闲了我可以上门服务!我告诉维修工如果你有空了那么你就直接来我家给我修理吧. 换成程序而言: 如果我想让一个类,调用我自己声明的方法,那么我需要一个一个回调接口来让我自己的类去实现它.通过这样来实现回调函数.回调函数就好像是C#中的委托.Java中并没有类似的机制.可以利用接口来实现回调. 下面是一个小的Demo: 下面是一个简单的类

Java 回调机制详解

一.说明 最近在写代码,发现 Java 回调机制蛮实用.在网上搜索部分资料以后,现在按照自己的理解进行归纳总结 ,有理解错的地方,希望大家能够帮忙指正! 先从一个很简单的 Android 开发例子说起.我们在界面上使用 Button 时,为其增加点击事件监听大概需要以下几个步骤 : ① 实例化 Button 对象,如 btn_call_back: ② btn_call_back.setOnClickListener(MainActivity.this); ③本类实现 OnClickListene