我有一个具有大量静态值的类,我很好奇是否有任何内置机制,如果其中两个具有相同的值,我可以让 Eclipse 抛出错误。
如果不是,那么合理的替代方案是什么(除了保持高度警惕,不要意外分配相同的值)?
Eclipse(或任何其他 IDE,就此而言)很可能没有特定的工具来检测这一点。
您可以构建一个使用反射 API 遍历静态值的单元测试,如果发现重复,则单元测试失败。这样你至少会知道是否有重复。
这样的事情怎么样?
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"));
}
}
你不能静态地做到这一点。您可以做的是添加一个单元测试,该测试使用反射遍历所有这些字段,并通过将它们添加到 Set 来查找重复项。
并不是说这是一个 100% 的解决方案,但至少对于字符串常量,使用公共静态枚举效果很好......
public static enum labels{
A,
B,
C
};
这些不能重叠,它们的字符串表示可以通过.name()
.
显然,除了它们的实际外观之外,它们没有任何价值,但这实际上非常适合我的情况。
我是枚举的新手,所以,如果有人有理由我不应该以这种方式处理这个问题,我很想知道为什么。