我已經從使用字符串的常量切換到使用枚舉。很多時候我需要enum的String
表示(用於日誌記錄,傳遞給需要String
等的API)。Java枚舉與字符串常量
使用String
常量,您可以傳遞字符串值,但使用枚舉值必須調用toString()
。有什麼辦法可以在提供枚舉變量時「默認」到字符串值?
許多海報評論說,如果您經常需要String
表示法,則可能不應該使用枚舉。
我已經從使用字符串的常量切換到使用枚舉。很多時候我需要enum的String
表示(用於日誌記錄,傳遞給需要String
等的API)。Java枚舉與字符串常量
使用String
常量,您可以傳遞字符串值,但使用枚舉值必須調用toString()
。有什麼辦法可以在提供枚舉變量時「默認」到字符串值?
許多海報評論說,如果您經常需要String
表示法,則可能不應該使用枚舉。
您應該完全採用enum
,而不是首先使用String
表示法。只能使用toString()
來生成消息,日誌等,但在內部,您需要使用enum
。任何Map
,Set
等操作都應該在enum
類型上完成,該類型確保正確的序列化,單例模式以及enum
類型應該具有的所有其他類型。
在你的代碼片段:
Object o = map.get(Options.OPTION_1);
//This won't work as intended if the Map key is a String
編譯時錯誤不談,你應該質疑地圖鍵是否應該甚至是String
類型的擺在首位。你使用它的方式看起來應該是Map<Options, Something>
。
在Java中有很多很好的理由使用Enum
。但是,如果你只需要String
就不行。例如,如果您要表示一組特定的實體,並且不希望它們與其他類型的事物(如String
s)類型相同,則Enum
將是適當的。另外,如果您打算調用操作它們的函數並根據特定實例進行區分。另一方面,如果您只對String
值感興趣,那麼String
常數沒有任何問題。
從你發佈的內容,我不能告訴用例是什麼。有什麼理由需要在這裏使用Enum
?
爲什麼在第四個代碼塊中爲枚舉值分配一個字符串變量? – CesarGon 2010-03-14 02:09:41
什麼是用例?你爲什麼做這個? – kiwicptn 2010-03-14 02:13:09
更新了帖子,希望能夠更清晰地表達! – 2010-03-14 20:56:45