当前位置: 首页 > 面试题库 >

Java枚举-为什么使用toString代替名称

关志勇
2023-03-14
问题内容

如果您在枚举api中查看该方法,name()则会显示:

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

为什么更好用toString()?我的意思是当name()已经是final时,toString可能会被覆盖。因此,如果您使用toString且有人重写它以返回硬编码值,则整个应用程序都将关闭…同样,如果您查看源代码,则toString()方法将完全返回名称。这是同一件事。


问题答案:

它实际上取决于您要对返回值执行的操作:

  • 如果需要获取用于声明枚举常量的确切名称,则应使用可能已被覆盖的name()astoString
  • 如果要以用户友好的方式打印枚举常量,则应使用toString已被覆盖(或不覆盖)的常量。

当我觉得这可能令人困惑时,我提供了一种更具体的getXXX方法,例如:

public enum Fields {
    LAST_NAME("Last Name"), FIRST_NAME("First Name");

    private final String fieldDescription;

    private Fields(String value) {
        fieldDescription = value;
    }

    public String getFieldDescription() {
        return fieldDescription;
    }
}


 类似资料:
  • 问题内容: 我有几个使用下划线分隔单词的Java枚举。在我的每个枚举中,我都有一个toString方法,该方法实现为super.toString()。replace(“ _”,“”),这样我就可以在GUI上显示String值而没有下划线。有什么办法可以让我的所有枚举都使用此toString方法,而不必在所有这些枚举之间重复?如果这是一个常规类,答案很简单,实现toString()然后让我所有需要该

  • 问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve

  • 问题内容: 今天,我浏览了该站点上的一些问题,发现提到了 以单例模式使用的这种解决方案声称具有线程安全性的优点。 我从未使用过,并且使用Java编程已经有两年多了。显然,他们改变了很多。现在,他们甚至在自己内部提供了对OOP的全面支持。 现在为什么要在日常编程中使用枚举?为什么? 问题答案: 当变量(尤其是方法参数)只能从一小部分可能的值中取出一个时,应始终使用枚举。例如类型常量(合同状态:“永久

  • 问题内容: 在Java中似乎可以编写如下代码: 现在,我想知道枚举的值为红色时是否可以在toString方法中返回“ abc”,绿色的时​​候可以返回“ def”。另外,是否可以在C#中做类似的事情? 我已经尝试过了,但是却遇到了编译器错误。 谢谢 问题答案: 回答2:

  • 问题内容: 我是一名即将毕业的计算机科学专业的学生,​​在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除