2012-08-17 26 views
2

我知道散列表不允許空鍵......但下面的代碼是如何工作的。在以下代碼中將大十進制初始化爲-99的含義

在下面的代碼中將大十進制初始化爲-99是做什麼的。

private static final BigDecimal NO_REGION = new BigDecimal (-99); 

public List getAllParameters (BigDecimal region, String key) { 
    List values = null; 
    if (region==null) { 
     region = NO_REGION; 
    } 
    Hashtable paramCache = (Hashtable)CacheManager.getInstance().get(ParameterCodeConstants.PARAMETER_CACHE); 
    if (paramCache.containsKey(region)) { 
     values = (List) ((Hashtable)paramCache.get(region)).get(key); 
    } 

    return values; 
} 

我掙扎了很長時間,不理解它。

+0

'不可變對象的靜態final'是Java逼近常數。 – SJuan76 2012-08-17 10:26:01

回答

4

這是null object pattern的實現:一個特殊的對象,BigDecimal(-99),被指定在「真實」 null而且不允許的情況下打的null作用。

唯一的要求是空對象必須不同於所有「常規」對象。這樣,下次程序需要查找沒有區域的條目時,只需要按NO_REGION鍵查找。

1

區域由哈希表中的BigDecimal標識(鍵) - 當未提供區域時(空)使用缺省值-99。

0

似乎作家成哈希表使用NO_REGION作爲沒有區域的值的關鍵。所以,讀者也在做同樣的事情。

1

對我來說,這看起來就像是糟糕的代碼 - 如果短暫的事情讓你「奮鬥了很長時間」,那通常是最好的指標。

只是清除它一點,它可能會讓很多更有意義:

private static Hashtable paramCache = (Hashtable)CacheManager.getInstance().get(ParameterCodeConstants.PARAMETER_CACHE); 

public List getAllParameters (BigDecimal region, String key) { 
    List values = null; 
    if (region != null && paramCache.containsKey(region)) { 
     Hashtable regionMap = (Hashtable) paramCache.get(region); 
     values = (List) regionMap.get(key); 
    } 
    return values; 
} 
相關問題