有没有办法防止静态变量值冲突?

时间:2013-10-23 19:07:27

标签: java eclipse

我有一个具有大量静态值的类,如果有任何内置机制我可以让Eclipse抛出一个错误,如果其中两个具有相同的值,我很好奇。

如果没有,那么这将是一个理性的替​​代方案(除了在不小心分配相同的价值时保持高度警惕)?

4 个答案:

答案 0 :(得分:4)

很可能Eclipse(或其他任何IDE)都没有特定的工具来检测它。

您可以使用Reflection API构建一个通过静态值的单元测试,如果找到重复项,则单元测试失败。这样你至少可以知道是否有重复。

答案 1 :(得分:1)

这样的事情怎么样?

import java.util.HashMap;

public class UniqueStaticVariables {

  private final static UniqueHashMap<String,String> values = 
        new UniqueHashMap<String,String>();

  static {
    values.put("FIRST_VALUE", "a");
    values.put("SECOND_VALUE", "b");
    values.put("THIRD_VALUE", "a");
  }

  public static String get(String key) {
    return values.get(key);
  }

  private static class UniqueHashMap<K,E> extends HashMap<K,E> {

    @Override
    public E put(K key, E value) {
        if(!containsValue(value)) {
            return super.put(key, value);
        }
        return null;
    }
  }

  public static void main(String[] args) {
    System.out.println(UniqueStaticVariables.get("FIRST_VALUE"));
    System.out.println(UniqueStaticVariables.get("SECOND_VALUE"));
    System.out.println(UniqueStaticVariables.get("THIRD_VALUE"));
  }
}

答案 2 :(得分:0)

你不能静态地这样做。您可以做的是添加一个单元测试,使用反射迭代所有这些字段,并通过将它们添加到Set来查找重复项。

答案 3 :(得分:0)

这不是100%的解决方案,但至少对于String常量,使用公共静态枚举非常有效......

public static enum labels{
 A,
 B,
 C
};

这些不能重叠,其字符串表示可以通过.name()来提取。

显然,除了实际的外观之外,他们不能拥有任何其他价值,但这实际上对我的情况非常有效。

我是enum的新手,所以,如果有人有理由不以这种方式处理这个问题,我很想知道为什么。