我刚注意到Enum#toString
javadoc个州(强调我的):
返回声明中包含的此枚举常量的名称。 此方法可能会被覆盖,但通常不是必需或理想。当存在更“程序员友好”的字符串形式时,枚举类型应覆盖此方法。
默认情况下,toString()
和name()
返回相同的内容,因此即使覆盖了toString
,仍然可以通过name()
访问枚举的名称方法
有人知道为什么覆盖Enum#toString
是不可取的吗?
编辑:作为参考,name()
的javadoc(重点与原文一样):
返回此枚举常量的名称,与其枚举声明中声明的完全相同。 大多数程序员应优先使用toString()方法,因为toString方法可能会返回一个更加用户友好的名称。此方法主要用于特殊情况,其中正确性取决于获取确切名称,不会因发行版本而异。
答案 0 :(得分:3)
使用枚举,您有一组特定的常量值。当为该枚举调用toString
方法时,通常会期望返回该名称,因此覆盖toString
方法会返回一些意外的结果。
答案 1 :(得分:2)
如果您的枚举比其名称更复杂,例如如果它们包含私有字段,则可以覆盖toSting()
以打印这些字段并更好地解释枚举字段而不仅仅是其名称。
答案 2 :(得分:1)
我认为这里有一些关于“理想”这个词含义的混淆。 javadoc基本上说了两次相同的东西:重写toString()通常不需要enum工作,因此这样做是不可行的(希望)。
所以回答你的问题:如果出现以下情况,那么不可能会覆盖toString():A)你知道你永远不必显示枚举名称的字符串表示,或者B )默认字符串表示足以在需要时识别枚举。