带空格的 Java 枚举元素?

新手上路,请多包涵

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

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

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

原文由 BSalunke 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

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

这样做会结束该标识符,并且解析器会假定接下来的内容是该语句上下文中的有效标记。很少(如果有的话)地方是合法的。

传统的 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 直接从人类可读版本转换为枚举值。

原文由 Dave Newton 发布,翻译遵循 CC BY-SA 4.0 许可协议

我要继续猜猜为什么要在名称中留一个空格;因为您想将其作为字符串引用。

所以这样做:

 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) 中使用。因此,重写 toString 基本上会创建枚举值的 HashMap。

原文由 Joe 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题