枚舉建構子隱含 private,不可被外部呼叫,亦不可標示 public(編譯錯誤)。此設計確保枚舉值唯一性與單例性——只能在枚舉內部宣告時由編譯器自動呼叫。
enum Priority {
public Priority(int v) { ... } // 編譯錯誤:constructor must be private
HIGH(1), MEDIUM(2), LOW(3);
}

enum Priority {
HIGH(38), MEDIUM(36.5), LOW(5.2); // 分號結束常數宣告
private final double temperature; // 欄位必須在常數宣告之後
Priority(double t) { // 隱含 private
this.temperature = t;
}
public double getTemperature() { return temperature; }
}
關鍵順序規則:
HIGH(38), MEDIUM(36.5), LOW(5.2);)必須在最前面,以分號結束。
public class Course {
public static final int ENGLISH = 1, CALCULUS = 2, MUSIC = 3;
}
public class Grade {
public static final int A = 1, B = 2, C = 3, D = 4, F = 5;
}
// 錯誤:編譯器視為相同 int 值,無法攔截
student.assignGrade(Course.ENGLISH); // 本意 Grade.A
public enum Course { ENGLISH, CALCULUS, MUSIC }
public enum Grade { A, B, C, D, F }
// 編譯錯誤:型別不相容
student.assignGrade(Course.ENGLISH); // 錯誤:required Grade, found Course
核心保證:每個枚舉值都是該枚舉類型的唯一實例,跨枚舉類型賦值直接編譯失敗,徹底杜絕「值衝突」與「語義混淆」。
| 屬性 | 說明 | 範例 |
|---|---|---|
| public static final | 隱含修飾符,不可重複宣告 | Priority.HIGH |
| 單例 | JVM 保證每個值在類別載入時僅建立一個實例 | Priority.HIGH == Priority.HIGH 恆為 true |
| 不可修飾 | 前面不可加 static/public/final(編譯錯誤) | ![]() |
| 實作 Comparable | 依宣告順序自然排序 | Priority.HIGH.compareTo(Priority.LOW) < 0 |
| 實作 Serializable | 自動支援序列化,保證反序列化後仍為同一實例 | 無需額外代碼 |
public enum X { 後,編輯器自動提示常數宣告區塊。public → 紅線報錯「constructor must be private」。static → 紅線報錯「enum constant cannot have modifiers」。values()、valueOf()、ordinal()、compareTo()。枚舉建構子私有化、欄位宣告順序固定、值的單例與型別安全特性,共同構建了編譯期保證的領域模型基石。Eclipse 3.1 以即時錯誤標記與智能輔助,將這些規則內化為開發流程的自動防呆機制,讓開發者專注於領域邏輯而非語法細節。