列舉可以有建構子,可建構複雜的列舉

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]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

購物車