Enumerated Type 有以下特性存在:
- public
除非在 class 內部中宣告其為 private,否則就會是 public - static
可透過 Enumerated Type 名稱直接使用 - final
不可改變
Enumerated Type(列舉型態) 的使用方式:
使用外部檔案定義 Enumerated Type
Action.java (Enumerated Type 設定檔)
EnumDemo.javapublic enum Action {
TURN_LEFT,
TURN_RIGHT,
SHOOT
}
public class EnumDemo {
public static void main(String[] args) {
doAction(Action.TURN_RIGHT);
}
//此傳入的參數型態為 "Action" enumerated type
public static void doAction(Action action) {
switch(action) {
case TURN_LEFT:
System.out.println("向左轉");
break;
case TURN_RIGHT:
System.out.println("向右轉");
break;
case SHOOT:
System.out.println("射擊");
break;
}
}
}
直接在 class 內部定義 Enumerated Type
用此種方式定義 Enumerated Type,則是將 Enumerated Type 視為 inner class 來使用,因此若是用以下範例,編譯後會有 EnumDemo2$InnerAction.class 這個檔案出現。
public class EnumDemo2 {
private enum InnerAction {TURN_LEFT, TURN_RIGHT, SHOOT};
public static void main(String[] args) {
doAction(InnerAction.TURN_RIGHT);
}
public static void doAction(InnerAction action) {
switch(action) {
case TURN_LEFT:
System.out.println("向左轉");
break;
case TURN_RIGHT:
System.out.println("向右轉");
break;
case SHOOT:
System.out.println("射擊");
break;
}
}
}
列出 Enumerated Type 中的成員
public class EnumIndex {
public static void main(String[] args) {
for(Action action: Action.values())
System.out.println(action.ordinal() + " " + action);
}
}
定義 method 或 constructor 至 Enumerated Type 中
定義 method
DetailAction.java
DetailActionDemo.javapublic enum DetailAction {
TURN_LEFT, TURN_RIGHT, SHOOT;
public String getDescription() {
switch(this.ordinal()) {
case 0:
return "向左轉";
case 1:
return "向右轉";
case 2:
return "射擊";
default:
return null;
}
}
}
public class DetailActionDemo {
public static void main(String[] args) {
for(DetailAction action : DetailAction.values())
System.out.println(action + ":" + action.getDescription());
}
}
定義 constructor
DetailAction2.java
使用這個 Enumerated Type 時,只要將 DetailActionDemo.java 中的「DetailAction」改為「DetailAction2」即可。public enum DetailAction2 {
TURN_LEFT("向左轉"), TURN_RIGHT("向右轉"), SHOOT("射擊");
private String description;
//使用 constructor 來指定 description 的值
//上面三筆資料就是以這個 constructor 所指定進來而產生相對應的結果
private DetailAction2(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
沒有留言:
張貼留言