在interface中,可以定義常數。例如:
- Action.java
package cc.openhome;
public interface Action {
public static final int STOP = 0;
public static final int RIGHT = 1;
public static final int LEFT = 2;
public static final int UP = 3;
public static final int DOWN = 4;
}
Java中很常見到於介面中定義這類常數,稱為列舉常數,這讓程式撰寫清晰一些。例如:
- Game.java
package cc.openhome;
public class Game {
public static void play(int action) {
switch(action) {
case Action.STOP:
System.out.println("播放停止動畫");
break;
case Action.RIGHT:
System.out.println("播放向右動畫");
break;
case Action.LEFT:
System.out.println("播放向左動畫");
break;
case Action.UP:
System.out.println("播放向上動畫");
break;
case Action.DOWN:
System.out.println("播放向下動畫");
break;
default:
System.out.println("不支援此動作");
}
}
public static void main(String[] args) {
play(Action.RIGHT);
play(Action.UP);
}
}
想想看,如果將上面這個程式改為以下,哪個在維護程式時比較清楚呢?
...
public static void play(int action) {
switch(action) {
case 0: // 數字比較清楚?還是列舉常數比較清楚?
System.out.println("播放停止動畫");
break;
case 1:
System.out.println("播放向右動畫");
break;
case 2:
System.out.println("播放向左動畫");
break;
略...
default:
System.out.println("不支援此動作");
}
}
public static void main(String[] args) {
play(1); // 數字比較清楚?還是列舉常數比較清楚?
play(3);
}
...
public static void play(int action) {
switch(action) {
case 0: // 數字比較清楚?還是列舉常數比較清楚?
System.out.println("播放停止動畫");
break;
case 1:
System.out.println("播放向右動畫");
break;
case 2:
System.out.println("播放向左動畫");
break;
略...
default:
System.out.println("不支援此動作");
}
}
public static void main(String[] args) {
play(1); // 數字比較清楚?還是列舉常數比較清楚?
play(3);
}
...
事實上,在interface中,也只能定義public static final的列舉常數,為了方便,也可以如下撰寫:
public interface Action {
int STOP = 0;
int RIGHT = 1;
int LEFT = 2;
int UP = 3;
int DOWN = 4;
}
int STOP = 0;
int RIGHT = 1;
int LEFT = 2;
int UP = 3;
int DOWN = 4;
}
編譯器會幫你展開為public static final,所以在介面中列舉常數,一定要使用=指定值,否則就會編譯錯誤。