阅读文档后String java.lang.Enum.name()
我不确定我知道什么时候使用姓名()以及何时使用tostring()。
返回该枚举常数的名称,完全按照其枚举声明中声明。大多数程序员应该使用ToString方法优先使用ToString方法,因为ToString方法可能会返回一个更友好的名称。此方法主要用于在正确性取决于获得确切名称的专业情况下使用,而该名称不会因发行而异。
特别是,即使文档表示喜欢toString()
,Java自己的标准口枚举用途name
当我以为文档所建议的时候。
public String getName() { return name(); }
此外Enum
工具toString()
作为,
public String toString() {
return name;
}
我无法想象用户定义的枚举会覆盖的情况toString()
所以name()
和toString()
几乎总是完全一样。
- 您能否解释一下为什么忽略文档并始终使用
name()
是个坏主意吗? - 该短语"不会因发行而异。如果名称不会有所不同,是否意味着
java.lang.Enum.toString()
会?
答案
主要区别name()
和toString()
就是它name()
是一个final
方法,因此不能被覆盖。这toString()
方法返回相同的值name()
默认情况下,但是toString()
可以被枚举子类覆盖。
因此,如果您需要字段本身的名称 , 使用name()
。如果您需要一个字段值的字符串表示 , 使用toString()
。
例如:
public enum WeekDay {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
public String toString() {
return name().charAt(0) + name().substring(1).toLowerCase();
}
}
在此示例中WeekDay.MONDAY.name()
返回"星期一",和WeekDay.MONDAY.toString()
返回"星期一"。
WeekDay.valueOf(WeekDay.MONDAY.name())
返回WeekDay.MONDAY
, 但WeekDay.valueOf(WeekDay.MONDAY.toString())
抛出IllegalArgumentException
。