【问题标题】:Any way to enforce compliance in java enum values?有什么方法可以强制执行 Java 枚举值的合规性?
【发布时间】:2019-09-02 14:52:31
【问题描述】:

考虑以下枚举:

public enum AllColors {
    WHITE,
    RED,
    GRAY,
    GREEN,
    BLUE,
    BLACK
}

public enum GrayscaleColors {
    WHITE,
    GREY,
    BLACK
}

枚举之间存在差异(灰色/灰色) - 但无法在编译时发现此错字。如果系统正在使用数据库存储或消息传递,并且必须根据枚举值在枚举值之间进行转换,这可能会产生麻烦。

我希望我能做这样的事情:

public enum GrayscaleColors {
    AllColors.WHITE,
    AllColors.GRAY,
    AllColors.BLACK
}

但这似乎是不可能的。

【问题讨论】:

  • 考虑使用EnumSet

标签: java enums literals


【解决方案1】:

您可以声明一个构造函数,并在构造函数中比较名称:

public enum GrayscaleColors {
    WHITE(AllColors.WHITE),
    GREY(AllColors.GRAY),
    BLACK(AllColors.BLACK);

    GrayscaleColors(AllColors ac) {
      if (!name().equals(ac.name()) throw new IllegalArgumentException();
    }
}

或者,您可以简单地使用AllColors.valueOf

public enum GrayscaleColors {
    WHITE,
    GREY,
    BLACK;

    GrayscaleColors() {
      // Will throw if no corresponding name exists.
      AllColors.valueOf(name());
    }
}

或者,当然,您可以编写一个单元测试来检查匹配的名称。

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 2011-01-30
    • 1970-01-01
    • 2011-12-26
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多