2010-03-14 544 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