当前位置:  开发笔记 > 编程语言 > 正文

带有空格的Java枚举元素?

如何解决《带有空格的Java枚举元素?》经验,为你挑选了3个好方法。

我正在研究java,我创建了一个枚举如下:

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

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



1> Dave Newton..:

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

这样做结束了标识符和解析器假定下一步是该语句的上下文中的有效标记.很少(如果有的话)合法的地方.

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


您可能需要一个与名称不同的名称......(OP中只有一个元素是真实国家.国家,语言,组成国家和大陆.相当一个枚举.)
+1用于提及`toString()`的问题.你可以添加一个`getDisplayName()`方法,而不是使用`toString()`.

2> Joe..:

我要继续猜猜你为什么要在名字中留一个空间; 因为你想把它作为一个字符串引用.

这样做:

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.


除非我正在讨论某些东西,否则这个例子在Java 8中不起作用; `MyEnum.valueOf("North America")`和`MyEnum.valueOf(MyEnum.NORTH_AMERICA.toString())`都抛出同样的错误:`IllegalArgumentException没有枚举常量ofi.devops.cmwf.model.trigger.MyEnum.North America`

3> Scott Hunter..:

问题没有(具体)与枚举有关:在Java中,名称不能有空格.尝试消除空间(使用大写来区分位)或使用下划线代替.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有