枚举的toString中的默认情况

时间:2015-03-21 06:51:32

标签: java enums tostring

我对Java中的枚举有些新意,我试图覆盖toString(),以便它可以为枚举返回特殊情况,为每种情况创建代码:

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作为默认的return语句,我显然得到一个StackOverflowError。有没有办法绕过这个并返回任何未包含在toString()中的情况?

1 个答案:

答案 0 :(得分:7)

  

有没有办法绕过这个并返回任何未包含在toString()中的情况?

我想你只是想:

return super.toString();

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

但是,我改变了实现,使字符串表示形式成为枚举值中的一个字段,在必要时在构造时指定:

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;
    }
}

经过测试:

public class Test {
    public static void main(String [] args){
        for (TestEnum x : TestEnum.values()) {
            System.out.println(x);
        }
    }
}

输出:

One
Two
Three
!
&
*