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

Java枚举toString()方法

诸嘉澍
2023-03-14
问题内容

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

public enum Example1 {
    HELLO_WORLD, HELLO_EARTH, HELLO_GLOBE
    @Override public String toString() {
        return super.toString().replace("_", " ");
    }
}
public enum Example2 {
    ANSWER_1, ANSWER_2, ANSWER_3
    @Override public String toString() {
        return super.toString().replace("_", " ");
    }
}

有没有人的解决方案不能在所有枚举中都重复此toString()方法?


问题答案:
public static String toString(Enum<?> enumVal) {
    return String.valueOf(enumVal).replace("_", " ");
}

用法:

String asString = toString(HELLO_WORLD);

要么,

String asString = toString(ANSWER_1);

类型安全方法:

public abstract class MyEnum<E extends MyEnum<E>> {

    protected MyEnum(String name) {
        this.name = name;
    }

    private String name;

    protected String name() {
        return name;
    };

    @Override
    public final String toString() {
        return name().replace("_", " ");
    }
}

public final static class Example1 extends MyEnum<Example1> {
    public static final Example1 HELLO_WORLD = new Example1("HELLO_WORLD");

    protected Example1(String name) {
        super(name);
    }
}

用法:

System.out.println(Example1.HELLO_WORLD);


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

  • 问题内容: 我中的值是需要在其中包含空格的单词,但是枚举的值中不能包含空格,因此将它们全部堆积在一起。我想重写以将这些空间添加到我告诉的位置。 当我在与添加空格相同的字符串上使用时,我还希望该枚举提供正确的枚举。 例如: 电话上的,其值是返回字符串。调用相同的字符串()会返回枚举值。 我怎样才能做到这一点? 问题答案: 您可以尝试此代码。由于无法覆盖方法,因此必须定义一个自定义方法(在下面的示例代

  • 问题内容: 我想声明一个枚举Direction,它具有一个返回相反方向的方法(以下语法不正确,即,不能实例化枚举,但它说明了我的观点)。这在Java中可行吗? 这是代码: 问题答案: 对于那些按标题吸引的人:是的,您可以在枚举中定义自己的方法。如果您想知道如何调用这种非静态方法,则可以使用与其他任何非静态方法相同的方法- 在定义或继承该方法的类型实例上调用它。如果是枚举,则此类实例仅为s。 因此,

  • 我刚刚注意到javadoc状态(强调为我的): 返回声明中包含的此枚举常量的名称。该方法可能被重写,尽管它通常不是必需的或不需要的。当存在更“程序员友好”的字符串窗体时,枚举类型应重写此方法。 默认情况下,和返回相同的内容,因此即使被重写,仍然可以通过方法访问枚举的名称。 编辑:供参考,的javadoc(强调与原文相同): 返回此枚举常量的名称,与在其枚举声明中声明的名称完全相同。大多数程序员应该

  • 主要内容:声明枚举,枚举类,为枚举添加方法,EnumMap 与 EnumSet枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。 声明枚举 声明枚举时必须使用 enu

  • 问题内容: 如果您在枚举api中查看该方法,则会显示: 返回此枚举常量的名称,该名称与在其枚举声明中声明的完全相同。大多数程序员应该优先使用toString方法,因为toString方法可能返回更用户友好的名称。此方法主要设计用于在特殊情况下正确性取决于获得确切名称的特殊情况,具体名称在各个发行版本之间不会有所不同。 为什么更好用?我的意思是当name()已经是final时,toString可能会