Java 5 引入 enum 徹底解決了 int 常量的類型不安全、無命名空間、編譯期常量脆弱、無語義等痛點。本文系統講解 Enum 定義、進階定制、工具類 (EnumSet/EnumMap) 及分布式環境下的比較陷阱。
enum RainbowColor { RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE }
RainbowColor.REDSerializable、Comparablepublic enum NewsRSSFeedEnum {
YAHOO_TOP_STORIES("https://rss.news.yahoo.com/rss/topstories"),
CBS_TOP_STORIES("https://feeds.cbsnews.com/CBSNewsMain?format=xml");
private final String rssUrl;
private NewsRSSFeedEnum(String url) { this.rssUrl = url; }
public String getRssURL() { return rssUrl; }
}
注意: 構造器必須 private;最後一個常量後用分號分隔方法區。
不同 JVM 中同名 Enum 實例 非同一對象:
== 比較引用 → false (跨 JVM).equals() 比較值 → true (默認按名稱比較)switch 內部用 equals → 正常工作最佳實踐: 永遠用 .equals() 或 Objects.equals() 比較 Enum,避免 ==。
long bitmask),極致緊湊高效EnumSet.range(Mon, Fri)、EnumSet.of(Mon, Wed)new EnumMap<>(WeekDayEnum.class)Mapschema = new EnumMap<>(WeekDayEnum.class); for (int i=0; i 總結
Enum 將「常量」升級為「行為豐富的類型」,配合
EnumSet/EnumMap構建類型安全、高性能的枚舉編程模型。跨 JVM 傳輸時注意序列化與比較語義,善用equals規避陷阱。