我已经从使用Strings的常量切换到使用枚举。很多时候我需要枚举的String
表示(用于记录,传递给需要String
的API等)。
使用String
常量,您只需传递String值,但使用枚举时您必须调用toString()
。有没有办法在提供枚举变量时“默认”为String值?
正如许多海报所评论的那样,如果你经常需要String
代表,也许不应该使用枚举。
答案 0 :(得分: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>
。
答案 1 :(得分:8)
在Java中使用Enum
有很多充分的理由。但是,如果您只需要String
。
例如,如果您要表示一组特定的实体,并且不希望它们与其他类型的事物(如String
s)等效,那么Enum
将是适当。此外,如果您打算调用操作它们的函数并根据特定实例进行区分。
另一方面,如果你只对String
某事物的价值感兴趣,那么String
常数就没有错。
根据您发布的内容,我无法确定用例是什么。您是否需要在此使用Enum
?