关于 java:toString 中枚举的默认情况

Default case in toString for enums

我对 Java 中的枚举有点陌生,我正在尝试重写 toString() 以便它可以返回枚举的特殊情况,并为每种情况创建代码:

1
2
3
4
5
6
7
8
9
10
enum TestEnum {
One, Two, Three,
Exclamation, Ampersand, Asterisk;

public String toString() {
    if (this == Ampersand) return"&";
    if (this == Exclamation) return"!";
    if (this == Asterisk) return"*";
    return null; // return toString(); ???
}

如果我使用 toString 作为默认返回语句,我显然会得到一个 StackOverflowError。有没有办法解决这个问题并返回未包含在 toString() 中的任何情况?


Is there a way to get around this and return any cases not included in the toString()?

我想你只是想要:

1
return super.toString();

然后它不会调用自己 - 它只会使用超类实现。

但是,我会更改实现以使字符串表示成为枚举值中的字段,在必要时在构造时指定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum TestEnum {
    One, Two, Three,
    Exclamation("!"), Ampersand("&"), Asterisk("*");

    private final String name;

    private TestEnum(String name) {
        this.name = name;
    }

    private TestEnum() {
        name = super.toString();
    }

    @Override public String toString() {
        return name;
    }
}

测试:

1
2
3
4
5
6
7
public class Test {
    public static void main(String [] args){
        for (TestEnum x : TestEnum.values()) {
            System.out.println(x);
        }
    }
}

输出:

1
2
3
4
5
6
One
Two
Three
!
&
*