0

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

如果不是,那么合理的替代方案是什么(除了保持高度警惕,不要意外分配相同的值)?

4

4 回答 4

4

Eclipse(或任何其他 IDE,就此而言)很可能没​​有特定的工具来检测这一点。

您可以构建一个使用反射 API 遍历静态值的单元测试,如果发现重复,则单元测试失败。这样你至少会知道是否有重复。

于 2013-10-23T19:16:48.960 回答
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"));
  }
}
于 2013-10-23T19:33:07.183 回答
0

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

于 2013-10-23T19:18:04.423 回答
0

并不是说这是一个 100% 的解决方案,但至少对于字符串常量,使用公共静态枚举效果很好......

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

这些不能重叠,它们的字符串表示可以通过.name().

显然,除了它们的实际外观之外,它们没有任何价值,但这实际上非常适合我的情况。

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

于 2013-10-23T19:59:16.707 回答