我有一个具有大量静态值的类,如果有任何内置机制我可以让Eclipse抛出一个错误,如果其中两个具有相同的值,我很好奇。
如果没有,那么这将是一个理性的替代方案(除了在不小心分配相同的价值时保持高度警惕)?
答案 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的新手,所以,如果有人有理由不以这种方式处理这个问题,我很想知道为什么。