Enum.name()和Enum.toString()有什么区别?

在阅读了文档之后,Stringjava.lang.Enum.name()我不确定是否知道何时使用name()和何时使用toString()。

返回此枚举常量的名称,该名称与在其枚举声明中声明的完全相同。大多数程序员应该优先使用toString方法,因为toString方法可能返回更用户友好的名称。此方法主要设计用于在特殊情况下正确性取决于获得确切名称的特殊情况,具体名称在各个发行版本之间不会有所不同。

特别是,即使文档说偏爱使用toString()Java,但如果我认为文档另有建议,则使用Java自己的StandardLocation枚举name

public String getName() { return name(); }

进一步Enum实现toString()

public String toString() {

return name;

}

我想不出的情况下,用户定义枚举将覆盖toString()这么name()toString()几乎都是一模一样的。

  1. 您能解释一下为什么忽略文档并始终使用name()是一个坏主意吗?
  2. 短语“不会因发行版本而异”怎么办?如果名称不会改变,是否暗示java.lang.Enum.toString()会这样?

回答:

之间的主要区别name()toString()name()是一个final方法,所以它不能被重写。该toString()方法返回的name()默认值与默认值相同,但toString()可以被Enum的子类覆盖。

因此,如果您需要 字段本身名称 ,请使用name()。如果您需要 字段值的字符串表示形式 ,请使用toString()

例如:

public enum WeekDay {

MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;

public String toString() {

return name().charAt(0) + name().substring(1).toLowerCase();

}

}

在此示例中, WeekDay.MONDAY.name()返回“ MONDAY”,然后 WeekDay.MONDAY.toString()返回“

Monday”。

WeekDay.valueOf(WeekDay.MONDAY.name())返回WeekDay.MONDAY,但WeekDay.valueOf(WeekDay.MONDAY.toString())抛出IllegalArgumentException

以上是 Enum.name()和Enum.toString()有什么区别? 的全部内容, 来源链接: utcz.com/qa/432348.html

回到顶部