【问题标题】:Add slash to an enumeration in Java在 Java 中的枚举中添加斜线
【发布时间】:2013-11-20 08:22:25
【问题描述】:

我需要像这样创建一个enumeration

public enum STYLE {
ELEMENT1(0), A/R (2)
//Staff
};

但是Java 不允许这样做。有什么解决办法吗? 谢谢

【问题讨论】:

  • 没有。您不能使用 / 作为名称的一部分。
  • 最适合您的解决方案,而不是 A/R,使用 ASlashR :)

标签: java enums enumeration slash


【解决方案1】:

您不能使用/ 来命名Java 标识符。您可以查看§JLS 3.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.
}

【讨论】:

    【解决方案2】:

    / 不能用于名称中。如果您的 A/R 常量表示“A 或 R”,您可以将其重命名为 A_OR_R

    编辑

    如果您需要将其与等于"A/R" 的String 进行比较,您可以覆盖常量中的toString() 方法。

    public enum Style {
        A_OR_R(2) {
            public @Override String toString() {
                return "A/R";
            }
        }, ELEMENT1(0);
    }
    

    然后

    String test = "A/R";
    boolean isEqual = test.equals(style.A_OR_R.toString());
    

    【讨论】:

    • 我需要将其与可能等于“A/R”的字符串进行比较
    • 可以覆盖常量中的toString()方法
    • 事实上,我在我的代码中使用 valueOf() 来检查我是否有“A/R”,这是一个已经定义的字符串
    【解决方案3】:

    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();
        } 
    }
    

    【讨论】:

    • 为什么不直接覆盖toString()?它已经默认为name(),旨在提供“printableName”。顺便说一句,您的方法仍然返回"A_R" 而不是"A/R"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2014-08-13
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多