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

TA贡献1824条经验 获得超8个赞
约定……约定啊……建议你看看观察者模式
比如你给按钮添加一个 action listener
button.addActionListener(new ActionListener() {
public actionPerformed(ActionEvent e) {
// do something
}
});
约定按钮在按下的时候会触发 action listener,所以你在加的时候,就已经知道了什么时候会调用。虽然不明白具体是哪个时间点,但是你知道如果发生了什么事情,就会调用。
添加回答
举报