我有一個有很多靜態值的類,並且很好奇是否有任何內置的機制,如果其中兩個具有相同的值,我可以讓Eclipse拋出一個錯誤。有什麼辦法可以防止靜態變量值碰撞?
如果不是,那麼這將是一個合理的替代方案(除非在意外分配相同的值時保持高度警惕)?
我有一個有很多靜態值的類,並且很好奇是否有任何內置的機制,如果其中兩個具有相同的值,我可以讓Eclipse拋出一個錯誤。有什麼辦法可以防止靜態變量值碰撞?
如果不是,那麼這將是一個合理的替代方案(除非在意外分配相同的值時保持高度警惕)?
最有可能的Eclipse(或任何其他IDE,就此而言)將不具有特定的工具來檢測此。
您可以使用Reflection API構建通過靜態值的單元測試,如果找到重複項,則單元測試失敗。這樣你至少可以知道是否有重複。
謝謝...我開始懷疑這將是我唯一的選擇...希望Eclipse有一些隱藏的功能(它有很多!),這將在編譯時處理這個,所以我wouldn不必等到運行時才能找到它。 –
你不能這樣做靜態。你可以做的是添加一個單元測試,使用反射迭代所有這些字段,並通過將它們添加到Set來查找重複項。
這樣的事情呢?
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"));
}
}
是的,我想這可能會來... ...我希望避免不得不等到運行時才發現我有價值重疊。 –
不,這是一個100%的解決方案,但至少字符串常量,使用公共靜態枚舉工作得很好......
public static enum labels{
A,
B,
C
};
這些不能重疊和他們的字符串表示可以通過.name()
拉。
很明顯,除了他們的實際外觀外,他們不能擁有任何價值,但實際上這對我的情況來說是完美的。
我是新來enum,所以,如果有人有一個原因,我不應該以這種方式處理,我想知道爲什麼。
'我有一個擁有大量靜態值的類',只是爲了讓你知道靜態變量不會被垃圾收集,並且直到內存中的點類存在於內存中,即使它們不是必需的。不必要的內存開銷 – Prateek
是否是不必要的內存開銷取決於情況;有些情況下靜態值非常有用。 – blalasaadri