Java 比较一类常量的字符串值

Java 比较一类常量的字符串值,java,string-comparison,Java,String Comparison,我的任务是创建一个针对常量类运行的测试,以确保类中的每个值都是唯一的。我说的不是常量名称(IDE会告诉开发人员这些名称是否重复),而是常量设置的值 我是Java新手,不知道该怎么做 为了清楚起见,我的常量类定义如下: public static final String STATUS_RECEIVED = "RE"; public static final String STATUS_CANCELLED = "CA"; public static final String STATUS_REVI

我的任务是创建一个针对
常量
类运行的测试,以确保类中的每个值都是唯一的。我说的不是常量名称(IDE会告诉开发人员这些名称是否重复),而是常量设置的值

我是Java新手,不知道该怎么做

为了清楚起见,我的
常量
类定义如下:

public static final String STATUS_RECEIVED = "RE";
public static final String STATUS_CANCELLED = "CA";
public static final String STATUS_REVIEWED = "RE";

在上面的示例中,我希望我的测试注意到有一个值被复制(因为STATUS_RECEIVED==STATUS_revieved)。如何以编程方式执行此操作?

迭代所有常量的字符串值,如果它们不在集合中,则将它们粘贴到集合中。如果它们已经在集合中,则测试失败


或者,您可以将重复项粘贴到另一个集合中,并在该集合中测试为空的重复项-这将在每次运行测试时为您提供一个重复项列表(而不必在删除所有重复项之前重新运行测试)。

迭代所有常量的字符串值,如果它们还没有在集合中,就把它们放在集合中。如果它们已经在集合中,则测试失败

或者,您可以将重复项粘贴到另一个集中,并在该重复项集为空的情况下进行测试—这将在每次运行测试时为您提供一个重复项列表(而不必在删除所有重复项之前重新运行测试)。

Field[]fields=Constants.class.getDeclaredFields();
List staticFields=new ArrayList();
用于(字段f:字段){
if(修饰语isStatic(f)){
静态字段。添加(f);
}
}
对于(int i=0;i
Field[]fields=Constants.class.getDeclaredFields();
List staticFields=new ArrayList();
用于(字段f:字段){
if(修饰语isStatic(f)){
静态字段。添加(f);
}
}
对于(int i=0;i
如果改用枚举,您的生活会轻松得多。然后,您可以在使成员名称与所需值匹配之间进行选择

enum Status {
RE,CA,RE;
}
在这种情况下,编译器保证它们是唯一的,或者将值存储为属性

enum Status {
  averbosenamedescribingwhatremeans("RE") 
  etc, etc

  private final String statusCode;

  Status(String code) {
  this.statusCode = code;
  }  
}
使用enums提供的values()方法,可以很容易地检查单元测试中代码的唯一性

另外,您将拥有类型安全代码


使用当前的方法,您需要通过反射查询类。

如果改用枚举,您的生活会轻松得多。然后,您可以在使成员名称与所需值匹配之间进行选择

enum Status {
RE,CA,RE;
}
在这种情况下,编译器保证它们是唯一的,或者将值存储为属性

enum Status {
  averbosenamedescribingwhatremeans("RE") 
  etc, etc

  private final String statusCode;

  Status(String code) {
  this.statusCode = code;
  }  
}
使用enums提供的values()方法,可以很容易地检查单元测试中代码的唯一性

另外,您将拥有类型安全代码


使用当前的方法,您需要通过反射查询类。

您只需发现字段,然后检查其唯一性(例如,将它们放在树形图中,然后计数)


摘自

您只需发现字段,然后检查其唯一性(例如,将其放入树形图中,然后计数)


取自

使用,遍历数组,获取每个值(使用),检查它是否已经在一个集合中,如果还没有,则将其存储在集合中。

使用,遍历数组,获取每个值(使用),检查它是否已经在一个集合中,如果不存在,则将其存储在集合中。

考虑将
常量
设置为一个
枚举
保存当前
字符串
值。比如:

public enum Constants {

    STATUS_RECEIVED("RE"),
    STATUS_CANCELLED("CA"),
    STATUS_REVIEWED("RE")

    private String value;

    public Constants(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}
然后,您的测试可以迭代每个
枚举
常量的
字段,如果该值已经存在,则测试将失败,例如:

public void testConstantValueUniqueness() {
    Set<String> values = new HashSet<String>();
    for(Constants constant : Constants.values()) {
        if(values.contains(constant.getValue())) {
            // fail
        }
        values.add(constant.getValue());
    }
}
public void testconstantValue唯一性(){
Set values=新的HashSet();
对于(常量:Constants.values()){
if(values.contains(constant.getValue())){
//失败
}
add(constant.getValue());
}
}

考虑将
常量
设置为一个
枚举
保存当前
字符串
值。比如:

public enum Constants {

    STATUS_RECEIVED("RE"),
    STATUS_CANCELLED("CA"),
    STATUS_REVIEWED("RE")

    private String value;

    public Constants(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}
然后,您的测试可以迭代每个
枚举
常量的
字段,如果该值已经存在,则测试将失败,例如:

public void testConstantValueUniqueness() {
    Set<String> values = new HashSet<String>();
    for(Constants constant : Constants.values()) {
        if(values.contains(constant.getValue())) {
            // fail
        }
        values.add(constant.getValue());
    }
}
public void testconstantValue唯一性(){
Set values=新的HashSet();
对于(常量:Constants.values()){
if(values.contains(constant.getValue())){
//失败
}
add(constant.getValue());
}
}

如果您的常量需要唯一,您可能会将它们用作某种枚举。您可能希望对可能的值使用枚举。这不会使用重复的条目进行编译,就像编译器捕获重复的常量名称一样。只是想一想…如果你的常数需要是唯一的,你可能会使用它们作为某种枚举。您可能希望对可能的值使用枚举。这不会使用重复的条目进行编译,就像编译器捕获重复的常量名称一样。只是一个想法…太棒了!第一行对我来说是一个很好的开始。感谢您提供的代码。这是当前
常量
类的一个很好的解决方案。但是,我仍然强烈建议您使用枚举