每種語言都有自己回調的方法,java也不例外.
java的回調是采用多态的方式來回調.比如:
1 interface mouselistener {
2 //當click方法被調用的時候代表被滑鼠點選了.
3 void click();
4 }
上面是一個接口,裡面隻有一個方法.先就通過一個例子展示java是如果施展多态的力量了.
1 public class model {
2
3 //初始化50個監聽器
4 private mouselistener[] listeners = new mouselistener[50];
5 //用于記錄目前listeners數組記錄到了哪裡
6 int index = 0;
7
8 public void addlistener(mouselistener listener) {
9 //向這個model中注冊一個監聽器
10 listeners[index++] = listener;
11 }
12
13 public void clickmodel() {
14 //調用注冊進來所有的listener的click方法
15 for (int i = 0; i < index; i++) {
16 listeners[i].click();
17 }
18 }
19 //測試model
20 public static void main(string[] args) {
21 model model = new model();
22 //添加一個匿名内部類,裡面實作了click方法.
23 model.addlistener(new mouselistener() {
24
25 public void click() {
26 system.out.println("我被點選了");
27 }
28 });
29 //再添加一個内部類.
30 model.addlistener(new mouselistener() {
31
32 public void click() {
33 system.out.println("我被點選了");
34 }
35 });
36
37 //下面給model一個點選
38 model.clickmodel();
39 }
40 }
41
42
43
以上是java的mvc架構下最精彩的一段代碼.下面是model的工作例子:
1 //測試model
2 public static void main(string[] args) {
3 model model = new model();
4 //添加一個匿名内部類,裡面實作了click方法.
5 model.addlistener(new mouselistener() {
6
7 public void click() {
8 system.out.println("我被點選了");
9 }
10 });
11 //再添加一個内部類.
12 model.addlistener(new mouselistener() {
13
14 public void click() {
15 system.out.println("我被點選了");
16 }
17 });
18
19 //下面給model一個點選,在實際的jdk源代碼中,也是這樣子去調用model中的響應方法的.
20 model.clickmodel();
21 }
22
我們可以看到,隻點選一次model,卻可以輸出了2次"我被點選了"的資訊.這也就是為什麼你可以向jbutton,jcombobox,jlist,jtable等等裡面添加任意多的各種listener.當然其中的奧秘仍需要各位讀者自己慢慢琢磨.下面是源代碼:
4 private mouselistener[] listeners = new mouselistener[50];
6 int index = 0;
10 listeners[index++] = listener;
15 for (int i = 0; i < index; i++) {
20 public static void main(string[] args) {
23 model.addlistener(new mouselistener() {
30 model.addlistener(new mouselistener() {
38 model.clickmodel();
42 interface mouselistener {
43 //當click方法被調用的時候代表被滑鼠點選了.
44 void click();
45 }
46