在开发阶段如何确保Java类中常量值的唯一性?
我们的团队有一个共享的在开发阶段如何确保Java类中常量值的唯一性?,java,constants,development-environment,Java,Constants,Development Environment,我们的团队有一个共享的Java类仅用于常量值 任何开发人员需要添加常量时 他将在这个班上增加一个记录 public class Constants_Class { public static final String Constant1 = "value1"; public static final String Constant2 = "value2"; public static final String Constant3 = "value3"; //
Java类
仅用于常量值任何开发人员需要添加常量时
他将在这个班上增加一个记录
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
}
问题是我们需要在开发时间内阻止任何开发人员
将新常量添加到其前面插入的值
//需要唯一常量值
有什么建议吗 你真的应该使用。这将解决您看到的问题 您还可以将
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()您确实应该使用的操作。这将解决您看到的问题 您还可以将
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()
来执行您在开发时要求的操作,这需要解析代码,本质上是重复编译。因此,让它被编译并创建一个单元测试来执行您的检查是有意义的,然后设置项目以便在每次编译代码库时运行单元测试。我很确定目前最常用的单元测试库是
要轻松检查值的唯一性,可以使用以下方法,如果要添加的项已存在于集合中,则该方法将返回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));
}
}
@测试
公共类TestConstantUniqueness(){
Set stringValues=newhashset();
对于(myConstantum值:myConstantum.values()){
字符串s=value.stringValue();
Assert.assertTrue(
“+myconstantum.class中的多个常量”
+具有字符串值\“+s+”\”,
stringValues.add(s));
}
}
要执行开发时的要求,需要解析代码,本质上是重复编译。因此,让它被编译并创建一个单元测试来执行您的检查是有意义的,然后设置项目以便在每次编译代码库时运行单元测试。我很确定目前最常用的单元测试库是
要轻松检查值的唯一性,可以使用以下方法,如果要添加的项已存在于集合中,则该方法将返回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));
}
}
@测试
公共类TestConstantUniqueness(){
Set stringValues=newhashset();
对于(myConstantum值:myConstantum.values()){
字符串s=value.stringValue();
Assert.assertTrue(
“+myconstantum.class中的多个常量”
+具有字符串值\“+s+”\”,
stringValues.add(s));
}
}
为什么不使用枚举?这将消除字符串作为人工常量的使用。这就是创建枚举的目的。枚举应该是使用它们的包的一部分,每个部分的枚举都有自己的名称空间。Ctrl+F也可以帮助您吗?当然,Enum是一个不错的选择。Enum会更简单,另一个选择是只读字典,但你需要更多的理由,还有一两个单元测试。@HovercraftFullOfEels但Enum也接受插入两个具有相同值的常量,例如Constant3(“value3”)、Constant4(“value3”)@ZiyaoWei我们需要it系统不是由开发人员维护为什么不使用枚举?这将消除字符串作为人工常量的使用。这就是创建枚举的目的。枚举应该是使用它们的包的一部分,每个部分的枚举都有自己的名称空间。Ctrl+F也可以帮助您吗?当然,Enum是一个不错的选择。Enum会更简单,另一个选择是只读字典,但你需要更多的理由,还有一两个单元测试。@HovercraftFullOfEels但Enum也接受插入两个具有相同值的常量,例如Constant3(“value3”)、Constant4(“value3”)@ZiyaoWei我们需要it系统不是由开发人员维护的,但也可以枚举接受插入2个具有相同值的常量,例如Constant3(“value3”)、Constant4(“value3”)代码>但也枚举接受插入2个具有相同值的常量,例如Constant3(“value3”)、Constant4(“value3”)代码>