当前位置: 首页 > 知识库问答 >
问题:

`enum.name()`和`enum.ToString()`有什么区别?[副本]

白吕恭
2023-03-14

返回此枚举常量的名称,与在其枚举声明中声明的名称完全相同。大多数程序员应该使用toString方法而不是这个方法,因为toString方法可能返回一个用户更友好的名称。此方法主要是为在特定情况下使用而设计的,在特定情况下,正确与否取决于获得准确的名称,而准确的名称不会因发布而异。

特别是,即使文档中说更喜欢而不是String(),Java自己的StandardLocation枚举使用了name而我认为文档中的建议是相反的。

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

此外,enumToString()实现为,

public String toString() {
    return name;
}
  1. 您能解释一下为什么忽略文档而总是使用name()是个坏主意吗?
  2. 那“不会因发布而异”这句话呢。如果name不变,是否意味着java.lang.Enum.ToString()会改变?

共有1个答案

阎声
2023-03-14

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();
    }
}
 类似资料:
  • 问题内容: 在阅读了文档之后,我不确定是否知道何时使用name()和何时使用toString()。 返回此枚举常量的名称,该名称与在其枚举声明中声明的完全相同。大多数程序员应该优先使用toString方法,因为toString方法可能返回更用户友好的名称。此方法主要设计用于在特殊情况下正确性取决于获得确切名称的特殊情况,具体名称在各个发行版本之间不会有所不同。 特别是,即使文档说偏爱使用Java,

  • Java的和有什么区别?

  • 我正在使用Apache Kafka 0.8.2.1,计划升级应用程序以使用Apache Kafka 1.0.0。当我考察Kafka流的时候,我得到了一些关于Kafka流和Kafka流的区别的问题。 我知道KafkaConsumer基本上用于字面上,从broker和KafkaStreams可以做各种事情,如或与数据库交互,甚至重新生成到其他kafka或任何其他系统。 所以,这是我的问题。KafkaC

  • matplotlib之间的区别是什么。pyplot和matplotlib。派拉布? 哪一个是首选的什么用途? 我有点困惑,因为它似乎是独立的,我可以做同样的事情。我错过了什么?

  • 我的问题是: 既然我们已经有了typedef样式,那么使using样式成为C++标准的动机是什么呢?

  • Java的(“A”)和“A”有什么区别? 为什么下面的两行给出的结果是一样的?它们之间有什么区别吗?