我只注意到了Enum#toString
javadoc国家(重点煤矿):覆盖枚举#toString不可取?
返回此枚举常量的名称,它包含在声明。 此方法可能会被覆盖,但通常不需要或合意。当一个更“程序员友好”的字符串形式存在时,枚举类型应该重写此方法。
默认情况下,toString()
和name()
返回相同的事情,所以甚至一度toString
已经被重写,人们仍然可以通过name()
方法访问枚举的名称。
有没有人知道为什么重写Enum#toString
不可取?
编辑:作为参考,name()
的javadoc的(着重号为原):
返回此枚举常量的名称,正是因为在枚举声明中宣布。 大多数程序员应该优先使用toString()方法,因为toString方法可能会返回一个更易用的名称。此方法主要用于专门的情况,其中正确性取决于获取确切的名称,从发布到发布不会有所不同。
可能需要的一个例子是,当存在一个现有的编码约定时,枚举值应该在全部大写中命名(例如'VALUE'),但对用户来说看起来很笨重,所以'toString'可以被实现为返回'name.toLowerCase()'或其他一些案例操作。 – jpm
我的用例是enum代表显示给用户的一组选项(例如在'JComboBox'中)。我的第一个倾向是重写'toString'来为用户提供一个本地化的显示名称,但是javadoc建议只重写以获得更好的“程序员友好”字符串形式,这导致我认为它不适合用作“用户友好”的形式。然而,在'name()'的javadoc中的注释表明'toString()'被设计为返回一个* user * - 友好的名字,这使我相信'toString'的javadoc应该与“user-friendly”代替。 –