2013-10-23 47 views
0

我有一個有很多靜態值的類,並且很好奇是否有任何內置的機制,如果其中兩個具有相同的值,我可以讓Eclipse拋出一個錯誤。有什麼辦法可以防止靜態變量值碰撞?

如果不是,那麼這將是一個合理的替代方案(除非在意外分配相同的值時保持高度警惕)?

+1

'我有一個擁有大量靜態值的類',只是爲了讓你知道靜態變量不會被垃圾收集,並且直到內存中的點類存在於內存中,即使它們不是必需的。不必要的內存開銷 – Prateek

+1

是否是不必要的內存開銷取決於情況;有些情況下靜態值非常有用。 – blalasaadri

回答

4

最有可能的Eclipse(或任何其他IDE,就此而言)將不具有特定的工具來檢測此。

您可以使用Reflection API構建通過靜態值的單元測試,如果找到重複項,則單元測試失敗。這樣你至少可以知道是否有重複。

+0

謝謝...我開始懷疑這將是我唯一的選擇...希望Eclipse有一些隱藏的功能(它有很多!),這將在編譯時處理這個,所以我wouldn不必等到運行時才能找到它。 –

0

你不能這樣做靜態。你可以做的是添加一個單元測試,使用反射迭代所有這些字段,並通過將它們添加到Set來查找重複項。

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")); 
    } 
} 
+0

是的,我想這可能會來... ...我希望避免不得不等到運行時才發現我有價值重疊。 –

0

不,這是一個100%的解決方案,但至少字符串常量,使用公共靜態枚舉工作得很好......

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

這些不能重疊和他們的字符串表示可以通過.name()拉。

很明顯,除了他們的實際外觀外,他們不能擁有任何價值,但實際上這對我的情況來說是完美的。

我是新來enum,所以,如果有人有一個原因,我不應該以這種方式處理,我想知道爲什麼。

相關問題