是否有一种解决方法可以使用冒号作为枚举中的键?
public enum foo {
_DEFAULT_GET("com.foo.my.package"); // works fine
_PREFIX_GET("com.foo.my.other.package");
_PRE:CODE_GET("com.foo.yet.another.package"); // <-- how do I escape this colon?
}
编辑:在我被遗忘之前,我想补充一点,传统的命名约定发生了变化。它在团队中引起了非常有趣的争论! : - )
答案 0 :(得分:7)
不,:
不是Java标识符中的合法字符。
合法字符是a-z A-Z,0-9,(the {unicode letters}
),_和$
你试图和
做同样的事情private String he:llo; // not valid since : is a language construct, used in places such as labels
此外,您的程序不应该依赖于您为字段指定的名称。除非你做反思;你也不应该那样......
请注意,您不应该在标识符中使用$,因为它主要由代码生成器使用,例如javac在编译包含内部类$的类时用作分隔符。
正如@ Kevin.K所提到的,a-zA-Z实际上是unicode字母代码。
答案 1 :(得分:4)
根据Java language specification每个枚举值has to be an identifier:
EnumConstant:
注释标识符参数 opt ClassBody opt
和identifiers内部不能包含冒号(:
)。所以不,你无法摆脱它。
答案 2 :(得分:1)
你做不到。作为名称,您可以使用包含字母字符,数字或下划线(_)或美元($)的字符串 还要注意,名称不能以数字开头。仅限字母字符,下划线或美元。
答案 3 :(得分:1)
Java中的标识符规则(又名“名称”)不允许将某些“特殊”字符(例如冒号(:)或分号(;)嵌入标识符中。
通过减少在看到这样一个特殊角色时需要考虑的可能背景,这是一个深思熟虑的选择。分号实际上只保留用于语句结束分隔符,冒号用于switch语句中的跳转点。
答案 4 :(得分:0)
奇怪的要求。这是不可能的,因为枚举属性只是类成员变量的语法糖,并且变量名称不能被转义。但是,您可以覆盖toString方法。烤箱有一个自定义构造函数和getter / setter用于其他属性。