我正在研究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.
问题没有(具体)与枚举有关:在Java中,名称不能有空格.尝试消除空间(使用大写来区分位)或使用下划线代替.