Effective Java Item34:用 enum 取代 int 常數
整理Effective Java書中Item 34: Use enum instead of int constant心得筆記
主旨
很多 Java 初學者一開始會用 int
常數(例如 1=小、2=中、3=大
)來表示一組固定的狀態。但這種做法其實會讓程式容易出錯、不易維護,也看不出意思。Java 後來加入了 enum
(列舉型別),提供更安全、清楚、有彈性的方式來處理這類需求。這篇文章會說明為什麼你應該用 enum
取代 int
常數。
點出問題:int 常數的缺點
用 int
常數的問題有很多,最常見的如下:
你在寫函式的時候:
但這個函式接受任何 int 值,例如 isWeekend(99)
也會執行,而且不會報錯,這就是「型別不安全」。
另外,如果你要列出所有可能的 day
值、加上 switch 判斷、加上屬性… 全部都得自己手動維護,不但容易出錯,程式也不好讀。
替代方案:用 enum 解決這些問題
列舉型別 enum
是 Java 的語言特性,讓你可以定義一組明確、有限的常數。
用法:
好處是:
- 型別安全:你只能傳入
Day
,不能傳int
。 - 可讀性高:看得懂
Day.SATURDAY
是什麼意思。 - 可以加上欄位、方法,例如:
用法變得更簡潔又清楚:
真實世界範例:狀態碼的管理
假設你在做訂單系統,舊作法會是這樣:
這樣容易搞混,還可能寫出錯誤的數值。
改成 enum:
如果要轉成字串顯示,還可以 override toString()
,或是加上欄位:
小結
enum
提供比 int
常數更清楚、更安全的方式來定義一組固定值。它能表達意圖、避免錯誤、減少維護負擔,是 Java 中非常推薦使用的工具。
如果你還在用 public static final int
來定義常數,現在就試著用 enum
重構看看吧!讓你的程式更具可讀性與穩定性。
Read other posts