Java枚举与字符串常量
问题描述:
我已经从使用字符串的常量切换到使用枚举。很多时候我需要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