首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2SE

Eclipse 3.1 深度體驗 J2SE 5.0 枚舉類型 (3):建構子私有性、欄位宣告順序與型別安全優勢

     編輯:J2SE

枚舉建構子:強制私有與參數化

枚舉建構子隱含 private,不可被外部呼叫,亦不可標示 public(編譯錯誤)。此設計確保枚舉值唯一性與單例性——只能在枚舉內部宣告時由編譯器自動呼叫。

錯誤示範


enum Priority {
    public Priority(int v) { ... } // 編譯錯誤:constructor must be private
    HIGH(1), MEDIUM(2), LOW(3);
}

Eclipse 編譯錯誤:建構子不可為 public

正確語法:參數化建構子與欄位


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; }
}

關鍵順序規則:

  1. 常數宣告(HIGH(38), MEDIUM(36.5), LOW(5.2);)必須在最前面,以分號結束。
  2. 實例欄位、建構子、方法必須在常數宣告之後。
  3. 違反順序將導致編譯錯誤:「enum constants must be declared first」。

從 int 常數到枚舉:型別安全的質變

傳統模式缺陷


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(編譯錯誤)錯誤:enum constant cannot have modifiers
實作 Comparable依宣告順序自然排序Priority.HIGH.compareTo(Priority.LOW) < 0
實作 Serializable自動支援序列化,保證反序列化後仍為同一實例無需額外代碼

Eclipse 3.1 開發防呆

  • 輸入 public enum X { 後,編輯器自動提示常數宣告區塊。
  • 在常數宣告前寫欄位/方法 → 紅線報錯「enum constants must be first」。
  • 建構子加 public → 紅線報錯「constructor must be private」。
  • 常數前加 static → 紅線報錯「enum constant cannot have modifiers」。
  • 內容輔助自動補全 values()、valueOf()、ordinal()、compareTo()。

總結

枚舉建構子私有化、欄位宣告順序固定、值的單例與型別安全特性,共同構建了編譯期保證的領域模型基石。Eclipse 3.1 以即時錯誤標記與智能輔助,將這些規則內化為開發流程的自動防呆機制,讓開發者專注於領域邏輯而非語法細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved