每種語言都有自己回調的方法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();
}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26201.html