我有一个枚举,简化形式就像这样。
public enum Codes{
Code1("someCode1", "someState"),
Code2("someCode2", "someState"),
...
...
private final String m_code;
private final String m_state;
}
我的目标是强制执行当其他人编辑此枚举以添加新值时,例如Code100
,m_code
的{{1}}不应与Code100
相同}对于之前的任何m_code
- Code1
。我能想到的唯一方法是为这个枚举编写一个单元测试来进行检查。这个问题有更好的解决方案吗?
理想情况下,我会喜欢这种情况的编译时错误,但我不确定这可以用Java完成吗?
答案 0 :(得分:4)
您的意思是您希望将m_code
作为唯一键处理?
尝试
public enum Codes{
someCode1("someState"),
someCode2("someState"),
...
...
private final String m_state;
}
enum
的名称始终是唯一的。违规比测试早,比运行早,比编译,违规中断语法检查。
答案 1 :(得分:1)
public enum Codes {
CODE1("someCode1", "someState"),
CODE2("someCode2", "someState"),
//...
//...
CODE99("someCode99", "someState");
static {
Set<String> codes = new HashSet<>();
for (Codes value : values()) {
if (!codes.add(value.code)) {
throw new RuntimeException(
"Duplicate code string value: \"" + value.code + "\"");
}
}
}
private final String code;
private final String state;
}
答案 2 :(得分:0)
坚持静态集中唯一需要的东西,并检查你是否在构造函数中添加了它,所以它都是在加载时完成的。