带有空格的Java枚举元素?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我工作在Java,我创建了一个枚举如下:

public enum myEnum
{
    india,
    russian,
    england,
    north America
}

以上示例在元素名称(即北美)中使用空格时会出现错误。任何建议如何解决上述问题?

提问于
用户回答回答于

您不能在标识符的中间放置空格。

这样做结束了,标识符和解析器假设接下来的任何内容都是该语句上下文中的有效标记。有几个(如果有的话)是合法的。

常规的Java值名称是:

INDIA,         // Or  India,
RUSSIA,        //     Russia,
NORTH_AMERICA; //     NorthAmerica;

一个enum可以有相关的属性,如人类可读的名字,例如,

public enum CountryAndOneContinent {

    INDIA("India"),
    RUSSIA("Russia"),
    NORTH_AMERICA("North America");

    private String displayName;

    CountryAndOneContinent(String displayName) {
        this.displayName = displayName;
    }

    public String displayName() { return displayName; }

    // Optionally and/or additionally, toString.
    @Override public String toString() { return displayName; }
}

我很矛盾使用toString提供表示层表示。

我更喜欢方法明确地表达他们的目的 - 它更具表现力和明显性。

toString是非常通用的,并且只允许一个表示。取决于toString不允许的上下文,参数等,可能需要多种输出格式。

toString包括在对象上使用默认字符串操作的优点,在这种情况下,使用valueOf直接从人类可读版本转换为枚举值。

用户回答回答于

我要继续努力,猜想为什么你想要一个名字空间; 因为你想把它作为一个字符串引用。

所以这样做:

public enum MyEnum {
    INDIA("India"),
    RUSSIAN("Russian"),
    ENGLAND("England"),
    NORTH_AMERICA("North America");    

    private String name;

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

    public String getName() {
        return this.name;
    }    
}

你可以考虑重写字符串。

public toString() {
    return name;
}

覆盖toString()的一个优点是该字符串也可以用在MyEnum .valueOf(myString)中。所以重写toString基本上创建了枚举值的HashMap。

扫码关注云+社区