有什么方法可以强制Java枚举值符合要求?

时间:2019-04-11 21:31:53

标签: java enums literals

考虑以下枚举:

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
}

但这似乎不可能。

1 个答案:

答案 0 :(得分:3)

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

Runtime.getRuntime().exec("tsc /path/to/script.ts");

或者,您可以简单地使用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

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