@@ -25,6 +25,7 @@ public interface ActionConstants {
25
25
26
26
共用的常數通常是可以直接取用並且不可被修改的,所以您在宣告時加上 "static" 與 "final",如此您可以在程式中直接使用像是 ActionConstants.TURN_LEFT 的名稱來取用常數值,例如:
27
27
28
+ ``` java
28
29
public void someMethod() {
29
30
....
30
31
doAction(ActionConstants . TURN_RIGHT );
@@ -43,6 +44,7 @@ public interface ActionConstants {
43
44
break ;
44
45
}
45
46
}
47
+ ```
46
48
47
49
如果使用類別來宣告的話,方法也是類似,例如:
48
50
@@ -68,6 +70,7 @@ public class CommandTool {
68
70
69
71
您已經知道可以在類別或介面中宣告常數來統一管理常數,這只是讓您存取與管理常數方便而已,來看看這個例子:
70
72
73
+ ``` java
71
74
public void someMethod() {
72
75
....
73
76
doAction(ActionConstants . TURN_RIGHT );
@@ -81,18 +84,21 @@ public class CommandTool {
81
84
..
82
85
}
83
86
}
87
+ ```
84
88
85
89
這種作法本身沒錯,只不過 doAction() 方法接受的是int型態的常數,您沒有能力阻止程式設計人員對它輸入 ActionConstants 規定外的其它常數,也沒有檢查 "switch" 中列舉的值是不是正確的值,因為參數 action 就只是 int 型態而已,當然您可以自行設計一些檢查動作,這需要一些額外的工作,如果您使用 J2SE 5.0 中新增的「列舉型態」(Enumerated Types),就可以無需花額外的功夫就輕易的解決這些問題。
86
90
87
91
在 J2SE 5.0 中要定義列舉型態是使用 "enum" 關鍵字,以下先來看看列舉型態的應用,舉個實際的例子,範例 11.3 是定義了 Action 列舉型態。
88
92
89
93
#### ** 範例 11.3 Action.java**
90
94
95
+ ``` java
91
96
public enum Action {
92
97
TURN_LEFT ,
93
98
TURN_RIGHT ,
94
99
SHOOT
95
100
}
101
+ ```
96
102
97
103
不用懷疑,在 Action.java 中撰寫範例 11.3 的內容然後編譯它,雖然語法上不像是在定義類別,但列舉型態骨子裏就是一個類別,所以您編譯完成後,會產生一個 Action.class 檔案。
98
104
@@ -128,6 +134,7 @@ public class EnumDemo {
128
134
除了讓您少打一些字之外,這個範例好像沒有什麼特別的,但注意到 doAction() 參數列的型態是 Action,如果您對 doAction() 方法輸入其它型態的引數,編譯器會回報錯誤,因為 doAction() 所接受的引數必須是 Action 列舉型態。
129
135
使用列舉型態還可以作到更進一步的檢驗,如果您在 "switch" 中加入了不屬於 Action 中列舉的值,編譯器也會回報錯誤,例如:
130
136
137
+ ``` java
131
138
...
132
139
public static void doAction(Action action) {
133
140
switch (action) {
@@ -145,6 +152,7 @@ public class EnumDemo {
145
152
break ;
146
153
}
147
154
} ...
155
+ ```
148
156
149
157
在編譯時編譯器會替您作檢查,若檢查出不屬於 Action 中的列舉值,會顯示以下的錯誤:
150
158
0 commit comments