每种语言都有自己回调的方法java也不例外
Java的回调是采用多态的方式来回调比如:
interface MouseListener {
//当click方法被调用的时候代表被鼠标点击了
void click();
}
上面是一个接口里面只有一个方法先就通过一个例子展示java是如果施展多态的力量了
public class Model {
//初始化个监听器
private MouseListener[] listeners = new MouseListener[];
//用于记录当前listeners数组记录到了哪里
int index = ;
public void addListener(MouseListener listener) {
//向这个model中注册一个监听器
listeners[index++] = listener;
}
public void clickModel() {
//调用注册进来所有的listener的click方法
for (int i = ; i < index; i++) {
listeners[i]click();
}
}
//测试model
public static void main(String[] args) {
Model model = new Model();
//添加一个匿名内部类里面实现了click方法
modeladdListener(new MouseListener() {
public void click() {
Systemoutprintln(我被点击了);
}
});
//再添加一个内部类
modeladdListener(new MouseListener() {
public void click() {
Systemoutprintln(我被点击了);
}
});
//下面给model一个点击
modelclickModel();
}
}
以上是java的MVC框架下最精彩的一段代码下面是model的工作例子:
//测试model
public static void main(String[] args) {
Model model = new Model();
//添加一个匿名内部类里面实现了click方法
modeladdListener(new MouseListener() {
public void click() {
Systemoutprintln(我被点击了);
}
});
//再添加一个内部类
modeladdListener(new MouseListener() {
public void click() {
Systemoutprintln(我被点击了);
}
});
//下面给model一个点击在实际的JDK源代码中也是这样子去调用Model中的响应方法的
modelclickModel();
}
我们可以看到只点击一次model却可以输出了次我被点击了的信息这也就是为什么你可以向JButtonJComboBoxJListJTable等等里面添加任意多的各种listener当然其中的奥秘仍需要各位读者自己慢慢琢磨下面是源代码:
public class Model {
//初始化个监听器
private MouseListener[] listeners = new MouseListener[];
//用于记录当前listeners数组记录到了哪里
int index = ;
public void addListener(MouseListener listener) {
//向这个model中注册一个监听器
listeners[index++] = listener;
}
public void clickModel() {
//调用注册进来所有的listener的click方法
for (int i = ; i < index; i++) {
listeners[i]click();
}
}
//测试model
public static void main(String[] args) {
Model model = new Model();
//添加一个匿名内部类里面实现了click方法
modeladdListener(new MouseListener() {
public void click() {
Systemoutprintln(我被点击了);
}
});
//再添加一个内部类
modeladdListener(new MouseListener() {
public void click() {
Systemoutprintln(我被点击了);
}
});
//下面给model一个点击
modelclickModel();
}
}
interface MouseListener {
//当click方法被调用的时候代表被鼠标点击了
void click();
}