決策矩陣
| 場景 | 推薦類型 | 理由 |
| 二值狀態(開/關、是/否) | boolean / bool | 語義明確,編譯器約束,內存最小 |
| 有限離散值(類型、狀態碼) | enum (Java/C#) / enum class (C++11) | 類型安全,IDE 提示,避免魔術數字,可擴展屬性/方法 |
| 需持久化/網絡傳輸/異構系統交互 | String 或 int (協議約定) | 跨語言平台兼容,JSON 序列化自然 |
| 高性能熱點路徑 | int / byte | 無裝箱/解析開銷,CPU 緩存友好 |
最佳實踐
- 內部邏輯優先使用 枚舉,利用編譯期檢查與可讀性。
- 對外接口(API、數據庫、配置文件)按協議轉換為 String 或 int,在邊界層做映射(如
Enum.name() / Enum.ordinal())。
- 避免在業務代碼中散落
"work"/"play" 字面量,集中定義常量或枚舉。
代碼示例
// 內部枚舉
public enum ActivityType { WORK, PLAY }
// Controller 入參轉換
@PostMapping("/schedule")
public void schedule(@RequestParam String typeStr) {
ActivityType type = ActivityType.valueOf(typeStr.toUpperCase());
// 後續業務使用 type
}