9

我刚刚注意到Enum#toStringjavadoc状态(强调我的):

返回声明中包含的此枚举常量的名称。此方法可能会被覆盖,尽管它通常不是必需的或不可取的。当存在更“程序员友好”的字符串形式时,枚举类型应覆盖此方法。

默认情况下,toString()返回name()相同的东西,所以即使toString被覆盖,仍然可以通过name()方法访问枚举的名称。

有谁知道为什么Enum#toString不希望覆盖?

编辑:作为参考,name()'s javadoc(重点与原文相同):

返回此枚举常量的名称,与其枚举声明中的声明完全相同。大多数程序员应该优先使用 toString() 方法而不是这个方法,因为 toString 方法可能会返回一个对用户更友好的名称。此方法主要设计用于正确性取决于获取确切名称的特殊情况,该名称不会因版本而异。

4

3 回答 3

3

使用枚举,您有一组特定的常量值。当toString为该枚举调用方法时,通常会期望返回名称,因此覆盖该toString方法会返回一些意想不到的结果。

于 2012-06-01T15:35:25.600 回答
2

如果您的枚举比它们的名称更复杂,例如,如果它们包含私有字段,则toSting()可以覆盖以打印这些并给出对枚举字段的更好解释,而不仅仅是其名称。

于 2012-06-01T15:44:11.167 回答
1

我认为这里的“理想”一词的含义存在一些混淆。javadoc 基本上说了两次同样的事情:枚举通常不需要覆盖 toString() ,因此这样做没有用(可取)。

所以回答你的问题:如果:A)你知道你永远不必显示枚举名称的字符串表示,或者 B)默认字符串表示足以识别枚举,则不希望覆盖 toString( )是否需要这样做。

于 2012-06-01T16:14:53.900 回答