Java枚举与字符串的常量

时间:2010-03-14 01:59:08

标签: java enums

我已经从使用Strings的常量切换到使用枚举。很多时候我需要枚举的String表示(用于记录,传递给需要String的API等)。

使用String常量,您只需传递String值,但使用枚举时您必须调用toString()。有没有办法在提供枚举变量时“默认”为String值?

正如许多海报所评论的那样,如果你经常需要String代表,也许不应该使用枚举。

2 个答案:

答案 0 :(得分:9)

您应该完全采用enum,而不是首先使用String表示。仅使用toString()生成消息,日志等,但在内部您需要使用enum。任何MapSet等操作都应该在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>

答案 1 :(得分:8)

在Java中使用Enum有很多充分的理由。但是,如果您只需要String

例如,如果您要表示一组特定的实体,并且不希望它们与其他类型的事物(如String s)等效,那么Enum将是适当。此外,如果您打算调用操作它们的函数并根据特定实例进行区分。

另一方面,如果你只对String某事物的价值感兴趣,那么String常数就没有错。

根据您发布的内容,我无法确定用例是什么。您是否需要在此使用Enum