阅读文档后String java.lang.Enum.name()我不确定我何时使用name()以及何时使用toString().
返回此枚举常量的名称,与其枚举声明中声明的完全相同.大多数程序员应优先使用toString方法,因为toString方法可能会返回一个更加用户友好的名称.此方法主要用于特殊情况,其中正确性取决于获取确切名称,该名称在不同版本之间不会有所不同.
特别是,即使文档说更喜欢toString(),Java自己的StandardLocation枚举name也会在我认为文档建议不同时使用.
public String getName() { return name(); }
Run Code Online (Sandbox Code Playgroud)
另外Enum实现toString()为,
public String toString() {
return name;
}
Run Code Online (Sandbox Code Playgroud)
我无法想到用户定义的枚举会覆盖的toString()情况name(),toString()并且几乎总是完全相同.
name()是一个坏主意?java.lang.Enum.toString()会这样?Han*_*nde 187
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,
WeekDay.MONDAY.name()返回"MONDAY",并
WeekDay.MONDAY.toString()返回"Monday".
WeekDay.valueOf(WeekDay.MONDAY.name())返回WeekDay.MONDAY,但WeekDay.valueOf(WeekDay.MONDAY.toString())抛出一个IllegalArgumentException.
But*_*jay 18
当您想要向用户(包括查看日志的开发人员)提供信息时,请使用toString().永远不要依赖代码来toString()提供特定的价值.切勿针对特定字符串进行测试.如果您的代码在某人正确更改了toString()返回时中断,那么它已经被破坏了.
如果需要获取用于声明枚举常量的确切名称,则应使用name(),因为它toString可能已被覆盖.
| 归档时间: |
|
| 查看次数: |
113431 次 |
| 最近记录: |