我们的团队只有Constant值的共享Java class
当任何开发人员需要添加常量时
他将在本课程中添加一条记录
public class Constants_Class {
public static final String Constant1 = "value1";
public static final String Constant2 = "value2";
public static final String Constant3 = "value3";
// Need to prevent that in Development time - NOT Run time
public static final String Constant4 = "value1"; // value inserted before
}
问题在于
我们需要在开发时间内阻止任何开发人员
添加一个新常量,其值插入之前
//需要唯一常数值(s)
有什么建议 ??
答案 0 :(得分:3)
你真的应该使用enums。这将解决您所看到的问题。
您还可以将String
值与枚举关联起来:
public enum MyEnums {
Constant1("value1"),
Constant2("value2"),
Constant3("value3");
private String value;
MyEnum(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
然后你可以MyEnum.Constant1.getValue()
。
答案 1 :(得分:1)
要在开发时做你要求的事情,需要解析代码,基本上是复制编译。所以让它编译并创建一个单元测试来执行检查是有意义的,然后设置项目,以便每次编译代码库时运行单元测试。我很确定使用的最常见的单元测试库是JUnit。
要轻松检查值的唯一性,可以使用Set.add方法,如果要添加的项目已存在于集合中,则返回false:
@Test
public class TestConstantUniqueness() {
Set<String> stringValues = new HashSet<String>();
for (MyConstantEnum value : MyConstantEnum.values()) {
String s = value.stringValue();
Assert.assertTrue(
"More than one constant in " + MyConstantEnum.class
+ " has the string value \"" + s + "\"",
stringValues.add(s));
}
}