Java Enum toString()方法

Fla*_*akk 3 java enums

我有几个使用下划线来分隔单词的Java枚举.在我的每个枚举中,我有一个toString方法,它实现为super.toString().replace("_",""),这样我就可以在没有下划线的GUI上显示字符串值.有没有什么方法可以让我的所有枚举使用这个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("_", " ");
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有一个解决方案,不会在所有枚举中复制这个toString()方法?

Old*_*eon 5

在Java 8中,我们可以使用接口来引入方法,因此您现在可以通过一种继承形式实际向枚举添加功能.

public interface HasName {
    public String name();
}

public interface PoliteEnum extends HasName {
    default String politeName() {
        return name().replace("_", " ");
    }
}

public enum X implements PoliteEnum {
    A_For_Ism, B_For_Mutton, C_Forth_Highlanders;
}

public void test() {
    for (X x : X.values()) {
        System.out.println(x.politeName());
    }
}
Run Code Online (Sandbox Code Playgroud)

版画

A For Ism
B For Mutton
C Forth Highlanders
Run Code Online (Sandbox Code Playgroud)

我承认它不像重写那样整洁,toString因为你不能覆盖一个Object方法,default但它肯定会让你enum整洁.