首页 > 代码库 > Java--回调接口

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--回调接口