Java enum 是特殊類,繼承 Enum,提供 values()、valueOf()、ordinal()、name() 等方法。枚舉常量是單例對象,可攜帶字段、方法、實現接口。
enum Move { LEFT, RIGHT, UP, DOWN }
Move m = Move.LEFT;
System.out.println(m.ordinal()); // 0
for (Move v : Move.values()) ...
enum Move { LEFT, RIGHT, UP, DOWN };
Move m = LEFT; // 隱式轉 int
if (m == LEFT) ...
// 缺點:枚舉常量污染外部作用域,不能有同名常量
enum class Move { LEFT, RIGHT, UP, DOWN };
Move m = Move::LEFT; // 必須加作用域
// 優點:強類型,不隱式轉 int,作用域隔離
// 可指定底層類型:enum class Move : char { ... };
| 特性 | Java enum | C++ enum class |
|---|---|---|
| 類型本質 | 類/對象 | 強類型整數 |
| 方法/字段 | 支持 | 不支持 (C++20 可用 static 方法) |
| switch 支持 | 支持 | 支持 |
| 隱式轉 int | 否 (ordinal()) | 否 (需 static_cast) |
| 作用域 | 枚舉類 | 枚舉類名 |
Move.LEFT → C++ 用 Move::LEFT。struct + static const 實例或類層級結構。enum class Flag : int { A=1, B=2 } 配合運算符重載。