如何在开发阶段确保Java类中Constants值的唯一性?

时间:2013-05-21 15:19:26

标签: java constants development-environment

我们的团队只有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)
有什么建议 ??

2 个答案:

答案 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));
    }
}