在Java中将斜杠添加到枚举中

Hou*_*dri 3 java enums enumeration slash

我需要创建一个enumeration这样的:

public enum STYLE {
ELEMENT1(0), A/R (2)
//Staff
};
Run Code Online (Sandbox Code Playgroud)

Java不允许这样做.有什么解决方案吗?谢谢

Sud*_*hul 7

您不能/用来命名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)


Kon*_*kov 5

/不能在名称中使用.如果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)


Ale*_*exR 5

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)

  • 为什么不直接重写`toString()`呢?它已经默认为“name()”,并旨在提供“printableName”。顺便说一句,你的方法仍然返回“A_R”而不是“A/R”。 (2认同)