2012-08-17 36 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; 
} 
相关问题