【发布时间】:2012-06-06 20:49:18
【问题描述】:
我刚刚注意到Enum#toString javadoc 状态(强调我的):
返回此枚举常量的名称,包含在声明中。 此方法可能会被覆盖,尽管它通常不是必要的或可取的。当存在更“程序员友好”的字符串形式时,枚举类型应覆盖此方法。
默认情况下,toString() 和 name() 返回相同的内容,因此即使 toString 已被覆盖,仍然可以通过 name() 方法访问枚举的名称。
有人知道为什么不希望覆盖 Enum#toString 吗?
编辑:供参考,name() 的 javadoc(重点与原文相同):
返回此枚举常量的名称,与其枚举声明中的声明完全相同。 大多数程序员应该优先使用 toString() 方法,因为 toString 方法可能会返回一个对用户更友好的名称。此方法主要设计用于正确性取决于获取确切名称的特殊情况,该名称不会因版本而异。
【问题讨论】:
-
可能需要的一个示例可能是存在一个现有的编码约定,即枚举值应以所有大写字母命名(例如,
VALUE),但这对用户来说看起来很笨重,所以toString可以实现返回name.toLowerCase()或其他一些案例操作。 -
我的用例是枚举表示向用户显示的一组选项(例如在
JComboBox中)。我的第一个倾向是覆盖toString以为用户提供本地化显示名称,但 javadoc 建议只覆盖以获得更好的“程序员友好”字符串形式,这让我相信它不适合用作“用户友好”的形式。但是,name()的 javadoc 中的注释表明toString()旨在返回一个 user 友好的名称,这使我相信toString的 javadoc 应该相同“用户友好" 代替。