是否可以在枚举中转义“:”冒号字符?

时间:2012-01-17 21:54:14

标签: java enums

是否有一种解决方法可以使用冒号作为枚举中的键?

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?
}

编辑:在我被遗忘之前,我想补充一点,传统的命名约定发生了变化。它在团队中引起了非常有趣的争论! : - )

5 个答案:

答案 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中的标识符规则(又名“名称”)不允许将某些“特殊”字符(例如冒号(:)或分号(;)嵌入标识符中。

You can read about it here.

通过减少在看到这样一个特殊角色时需要考虑的可能背景,这是一个深思熟虑的选择。分号实际上只保留用于语句结束分隔符,冒号用于switch语句中的跳转点。

答案 4 :(得分:0)

奇怪的要求。这是不可能的,因为枚举属性只是类成员变量的语法糖,并且变量名称不能被转义。但是,您可以覆盖toString方法。烤箱有一个自定义构造函数和getter / setter用于其他属性。