考虑以下枚举:

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

public enum GrayscaleColors {
    WHITE,
    GREY,
    BLACK
}


枚举之间存在差异(GRAY / GREY)-但是在编译时无法捕捉这种错字。如果系统使用数据库存储或消息传递并且必须根据枚举值在枚举值之间进行转换,则可能会造成麻烦。

我希望我可以做这样的事情:

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


但这似乎是不可能的。

最佳答案

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

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


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

关于java - 有什么方法可以强制Java枚举值符合要求?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55641479/

10-10 22:42