Java enum elements with space?

2022-09-01 05:33:36

我在java上工作,我创建了一个枚举,如下所示:

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

上面的例子给出了在元素名称中使用空格时的错误(即北美)。任何建议如何解决上述问题?


答案 1

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

这样做将结束该标识符,并且解析器假定接下来出现的任何内容在该语句的上下文中都是有效的令牌。很少有(如果有的话)地方是合法的。

传统的 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

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


答案 2

我锣着继续前进,猜猜为什么你想要在名字中有一个空格;因为您希望将其作为字符串引用。

所以这样做:

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 String toString() {
    return name;
}

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