Hou*_*dri 3 java enums enumeration slash
我需要创建一个enumeration这样的:
public enum STYLE {
ELEMENT1(0), A/R (2)
//Staff
};
Run Code Online (Sandbox Code Playgroud)
但Java不允许这样做.有什么解决方案吗?谢谢
您不能/用来命名Java标识符.您可以查看§JLS3.8,了解在Java标识符命名中允许使用的所有特殊字符.
对于您的场景,您可以使用看起来像这样的枚举.
enum STYLE {
ELEMENT1(0, "ELEMENT1"), A_R(2, "A/R");
private int code;
private String name;
private STYLE(int code, String name) {
this.code = code;
this.name = name;
}
// Other methods.
}
Run Code Online (Sandbox Code Playgroud)
/不能在名称中使用.如果A/R常量表示"A或R",则可以将其重命名为A_OR_R.
编辑:
如果需要将它与String相等"A/R",则可以覆盖toString()常量中的方法.
public enum Style {
A_OR_R(2) {
public @Override String toString() {
return "A/R";
}
}, ELEMENT1(0);
}
Run Code Online (Sandbox Code Playgroud)
然后
String test = "A/R";
boolean isEqual = test.equals(style.A_OR_R.toString());
Run Code Online (Sandbox Code Playgroud)
java中的枚举只是一个编译时的语法糖。实际上enum只是一个类,enum成员就像public final static这个类的字段。每个字段的名称必须遵循一定的规则。例如,名称不能包含在语言中具有特殊含义的特殊字符。例如/不能用作名称的一部分。
A_R如果你愿意,你可以打电话给它。
但是,如果您还希望能够A/R从枚举成员中提取字符串,A_R您可以定义返回它的方法,例如
public enum STYLE {
ELEMENT1(0),
A_R (2) {
@Override
public String printableName() {
return "A_R";
}
};
public String printableName() {
return name();
}
}
Run Code Online (Sandbox Code Playgroud)