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

我是Java的新手,不确定如何进行此操作。

需要明确的是,我的Constants类的定义如下:

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


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

最佳答案

Field[] fields = Constants.class.getDeclaredFields();
List<Field> staticFields = new ArrayList<>();
for(Field f:fields) {
  if (Modifier.isStatic(f)) {
    staticFields.add(f);
  }
}
for (int i = 0; i < staticFields.size(); i++) {
  for (int j = i + 1; j < staticFields.size(); j++) {
    if (staticFields.get(i).get(null).equals(staticFields.get(j).get(null))) {
      throw new AssertionFailedError(staticFields.get(i) + " equals "
        + staticFields.get(j));
    }
  }
}

关于java - 比较一类常量的字符串值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10214772/

10-11 03:47