public enum Color { RED, GREEN, BLUE }
public static final,實例創建於類加載時,天然單例。values() 獲取所有常量數組,valueOf(name) 字符串轉枚舉,ordinal() 獲取聲明順序(從 0 開始)。Serializable、Comparable,可用於 switch。public enum Season {
SPRING("春"), SUMMER("夏"), AUTUMN("秋"), WINTER("冬");
private final String cnName;
Season(String cnName) { this.cnName = cnName; }
public String getCnName() { return cnName; }
}
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,擴展新運算只需新增常量。
public interface Behaviour { void act(); }
public enum Animal implements Behaviour {
CAT { public void act() { System.out.println("喵~"); } },
DOG { public void act() { System.out.println("汪!"); } };
}
EnumMap:鍵為枚舉時,內部用數組實現,比 HashMap 快數倍、內存更小。EnumSet:位向量實現,集合操作極快,替代 Enum.values() 遍歷。枚舉序列化只寫入常量名,反序列化調用 valueOf,天然防止反序列化攻擊創建新實例,保證單例。
ordinal() 持久化 → 重構導致順序變化數據錯亂,應用 name() 或自定義代碼字段。