public enum Grade {
// 優先定義列舉實例,傳入二個參數
A(9, "優異"),
B(8, "佳"),
C(7, "良好"),
D(6, "普通"),
F(5, "略差"),
INCOMPLETE(4, "多努力"); // ’;’分號為必要,不可少
// 新屬性需寫在列舉實例之後
private int score;
private String description;
// 建構子預設為 private,可寫可不寫;不能定義為public
// 建構子有二個參數
Grade(int score, String desc) {
this.score = score;
this.description = desc;
}
public int getScore() {
return score;
}
public String getDescription() {
return description;
}
}
依據上例,有幾件事項要說明一下:
1. 列舉實例必須最先定義。
2. 最後一個列舉實例必須加上分號(;)。
3. 新屬性不能在列舉實例之前宣告,需在列舉實例之後宣告。
4. 建構子有二個參數,所以每個列舉實例都要傳入二個參數。
5. 建構子是隱含性的private,private修飾詞可寫可不寫,不能變更為public。
用法示範:
1. 取得Grade.A的分數:
int score = Grade.A.getScore(); //9
或
Grade gradeInstance = Grade.A;
int score = gradeInstance.getScore(); //9
2. 取得Grade.A的說明:
String desc = Grade.A.getDescription(); //等級C
或
Grade gradeInstance = Grade.C;
String desc = gradeInstance.getDescription(); //等級C
列舉常用的方法(method):
1. public final int compareTo(E o) – 與指定的列舉比較,該方法返回一個負整數、零或正整數,據此以表示小於、等於或大於指定的列舉。回傳值的計算方式為該列舉的ordinal()減掉指定列舉的ordinal()。
用法:
int retValue = Grade.INCOMPLETE.compareTo(Grade.D); //回傳值為正整數2(5-3=2),表示大於Grade.D
2. public final boolean equals(Object other) –與指定的列舉比較,該方法返回一個布林值,據此以表示是不相等(false)或相等(true)於指定的列舉。
※除了可以使用equals()比較,也可以使用”==“比較。
用法:
(1) Boolean retValue = Grade.INCOMPLETE.equals(Grade.D); //false
(2) Boolean retValue = Grade.INCOMPLETE == Grade.D; // false
3. public final String name()–返回列舉實例的名稱。
用法:
String retValue = Grade.INCOMPLETE.name(); // INCOMPLETE
4. public final int ordinal()–返回列舉實例的序號,從零開始編號。
用法:
int retValue = Grade.INCOMPLETE.ordinal(); // 5
5. public String toString()–返回列舉實例的名稱。
用法:
String retValue = Grade.INCOMPLETE.toString(); // INCOMPLETE
※本方法(method)可以覆寫(Override),客製化返回的字串。
例:
@Override
public String toString() {
return this.score+"_"+this.description;
}
6. public static E valueOf(String name) –返回具有指定名稱的列舉實例。
※本方法(method)是靜態(static)方法。
用法:
Grade gradeInstance = Grade.valueOf("INCOMPLETE"); //可取得Grade.INCOMPLETE,好用之處就是用字串就可以取得相對應的列舉
7. public static E[] values() –返回所有列舉實例。
※本方法(method)是靜態(static)方法。
用法:
Grade[] grades = Grade.values(); //陣列長度為6,陣列內容為[Grade.A, Grade.B, Grade.C, Grade.D, Grade.F, Grade.INCOMPLETE]