猿问

为什么接口可以实现回调?

don‘t call me ,i will call you,代码怎么就知道什么时机调用呢?

HUH函数
浏览 647回答 2
2回答

翻翻过去那场雪

一般框架都有设置 callback/hook 的接口, 当框架内某个事件发生时, 就会调用用户设置的回调.例如下面的一个简单例子:public class CallbackTest {    public static void main(String args[]) throws Exception {        // 1. 实例化一个回调逻辑.        Callback userCallback = new Callback() {            @Override            public void call(String message) {                System.out.println("Call from framework, message: " + message);            }        };        // 2. 初始化一个假象的框架, 并设置用户的回调接口.        SomeFramework framework = new SomeFramework(userCallback);        // 3. 启动框架        framework.start();        Thread.sleep(5000);    }    interface Callback {        void call(String message);    }    static class SomeFramework implements Runnable {        Callback userCallback;        public SomeFramework(Callback userCallback) {            this.userCallback = userCallback;        }        public void start() {            new Thread(this).start();        }        @Override        public void run() {            try {                Thread.sleep(3000);                somethingHappened();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        // 4. 当框架内的状态变化时或者是发生了某个事件时, 就调用用户设置的回调接口.        private void somethingHappened() {            userCallback.call("Something happended!");        }    }}其实就是有点像事件驱动或观察者模式, 框架保存有用户的回调接口, 而这个接口就承担了框架和用户代码沟通的桥梁, 当框架检测到某个事件发生后, 通过此回调接口来通知用户代码.

有只小跳蛙

约定……约定啊……建议你看看观察者模式比如你给按钮添加一个 action listenerbutton.addActionListener(new ActionListener() {    public actionPerformed(ActionEvent e) {        // do something    }});约定按钮在按下的时候会触发 action listener,所以你在加的时候,就已经知道了什么时候会调用。虽然不明白具体是哪个时间点,但是你知道如果发生了什么事情,就会调用。
随时随地看视频慕课网APP

相关分类

Java
我要回答