2010-03-14 141 views
2

我已經從使用字符串的常量切換到使用枚舉。很多時候我需要enum的String表示(用於日誌記錄,傳遞給需要String等的API)。Java枚舉與字符串常量

使用String常量,您可以傳遞字符串值,但使用枚舉值必須調用toString()。有什麼辦法可以在提供枚舉變量時「默認」到字符串值?

許多海報評論說,如果您經常需要String表示法,則可能不應該使用枚舉。

+1

爲什麼在第四個代碼塊中爲枚舉值分配一個字符串變量? – CesarGon 2010-03-14 02:09:41

+0

什麼是用例?你爲什麼做這個? – kiwicptn 2010-03-14 02:13:09

+0

更新了帖子,希望能夠更清晰地表達! – 2010-03-14 20:56:45

回答

9

您應該完全採用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>

7

在Java中有很多很好的理由使用Enum。但是,如果你只需要String就不行。例如,如果您要表示一組特定的實體,並且不希望它們與其他類型的事物(如String s)類型相同,則Enum將是適當的。另外,如果您打算調用操作它們的函數並根據特定實例進行區分。另一方面,如果您只對String值感興趣,那麼String常數沒有任何問題。

從你發佈的內容,我不能告訴用例是什麼。有什麼理由需要在這裏使用Enum