0

我们团队有一个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

}  

问题是
我们需要在开发时间阻止任何开发人员
添加一个新的常量,它的值插入到
//需要唯一常量值之前有什么
建议吗??

4

2 回答 2

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()

于 2013-05-21T15:29:45.987 回答
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));
    }
}
于 2013-05-23T00:44:25.340 回答