为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2019-03-13 09:15:57
don‘t call me ,i will call you,代码怎么就知道什么时机调用呢?
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

一般框架都有设置 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!");

        }

    }

}

其实就是有点像事件驱动或观察者模式, 框架保存有用户的回调接口, 而这个接口就承担了框架和用户代码沟通的桥梁, 当框架检测到某个事件发生后, 通过此回调接口来通知用户代码.


查看完整回答
反对 回复 2019-04-25
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

约定……约定啊……建议你看看观察者模式


比如你给按钮添加一个 action listener


button.addActionListener(new ActionListener() {

    public actionPerformed(ActionEvent e) {

        // do something

    }

});

约定按钮在按下的时候会触发 action listener,所以你在加的时候,就已经知道了什么时候会调用。虽然不明白具体是哪个时间点,但是你知道如果发生了什么事情,就会调用。


查看完整回答
反对 回复 2019-04-25
  • 2 回答
  • 0 关注
  • 646 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号