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

Java 枚舉類型完全指南:從基礎到高級模式

     編輯:Java 綜合教學

Java 枚舉類型完全指南:從基礎到高級模式

1. 基礎枚舉

public enum Color { RED, GREEN, BLUE }
  • 枚舉常量默認 public static final,實例創建於類加載時,天然單例。
  • values() 獲取所有常量數組,valueOf(name) 字符串轉枚舉,ordinal() 獲取聲明順序(從 0 開始)。
  • 實現 Serializable、Comparable,可用於 switch。

2. 帶字段與方法的枚舉

public enum Season {
    SPRING("春"), SUMMER("夏"), AUTUMN("秋"), WINTER("冬");
    private final String cnName;
    Season(String cnName) { this.cnName = cnName; }
    public String getCnName() { return cnName; }
}
  • 構造器 默認 private,不可外部實例化。
  • 可定義靜態/實例方法、字段,甚至實現接口。

3. 策略模式:帶行為的枚舉

public enum Operation {
    ADD { public double apply(double a, double b) { return a + b; } },
    SUB { public double apply(double a, double b) { return a - b; } },
    MUL { public double apply(double a, double b) { return a * b; } },
    DIV { public double apply(double a, double b) { return a / b; } };
    public abstract double apply(double a, double b);
}

// 使用
double result = Operation.ADD.apply(1, 2); // 3.0

每個常量匿名內部類實現抽象方法,替換大量 if/else 或 switch,擴展新運算只需新增常量。

4. 實現接口的枚舉

public interface Behaviour { void act(); }

public enum Animal implements Behaviour {
    CAT { public void act() { System.out.println("喵~"); } },
    DOG { public void act() { System.out.println("汪!"); } };
}

5. EnumMap / EnumSet 高效集合

  • EnumMap:鍵為枚舉時,內部用數組實現,比 HashMap 快數倍、內存更小。
  • EnumSet:位向量實現,集合操作極快,替代 Enum.values() 遍歷。

6. 序列化特殊性

枚舉序列化只寫入常量名,反序列化調用 valueOf,天然防止反序列化攻擊創建新實例,保證單例。

7. 避坑清單

  • ❌ 濫用 ordinal() 持久化 → 重構導致順序變化數據錯亂,應用 name() 或自定義代碼字段。
  • ❌ 枚舉中持有大量狀態/資源 → 單例生命周期長,易洩露內存。
  • ✅ 狀態機、策略、命令模式首選枚舉,類型安全、編譯期檢查、可讀性強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved