再次理解回调的含义

哪个类实现了回调监听接口中的方法,就回去调用哪个类中的对应的方法。

再次理解回调的含义_第1张图片

主函数中调用 HttpUtilsget方法,第二个参数传入 View的实例,那么当 get方法内部执行到 listener调用方法的地方的时候,就会去回调 View中的方法。
这就是 回调方法
例子:

//回调接口
public interface Listener {
    void onSucceed(String info);
    void onFailed(String info);
}
//模仿网络访问类
public class HttpUtils {
    //参数是url和对应的监听器
    public void get(String url, Listener listener){
        //开启延时的一个线程模拟网络访问
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //对网络访问结果进行判断并接着调用相应的监听器的方法
                if (url==null){
                    listener.onFailed("error");
                }else {
                    listener.onSucceed("anyInfo");
                }
            }
        }).start();
    }
}
//实现了监听器的类,那么如果调用HttpUtils中的get()方
//法,并且将View的实例作为监听器传入时,当网络访问得
//到结果时,就会回头调用View类中的如下两个方法。
public class View implements Listener{
    @Override
    public void onSucceed(String info) {
        System.out.print(info);
    }

    @Override
    public void onFailed(String info) {
        System.out.print(info);
    }
}

入口main函数

public class Main {
    public static void main(String[] args) throws Exception {
        View view = new View();
        new HttpUtils().get("anyUrl", view);
    }
}

点击run : 延时一秒后打印:anyInfo

你可能感兴趣的:(再次理解回调的含义)