gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:29:16 28 4
gpt4 key购买 nike

阅读 String java.lang.Enum.name() 的文档后,我不确定我是否理解何时使用 name()以及何时使用 toString() .

Returns the name of this enum constant, exactly as declared in its enum declaration. Most programmers should use the toString method in preference to this one, as the toString method may return a more user-friendly name. This method is designed primarily for use in specialized situations where correctness depends on getting the exact name, which will not vary from release to release.

特别是,即使文档说更喜欢 toString(),Java 自己的 StandardLocation枚举使用 name 而我认为文档另有建议。

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

此外,EnumtoString() 实现为,

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() 返回“星期一”。

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

关于java - `Enum.name()` 和 `Enum.toString()` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18031125/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com