带静态Map的空指针异常

时间:2011-09-23 03:36:14

标签: java exception static initialization

现在是早上5点,我有点睡着了,所以可能就是这样(我对Java也相对较新)。但我不明白为什么这段代码会生成Null Exception。那时应该初始化地图,不应该吗?

private static final Map<String, Integer> CONDS_MAP = 
    Collections.unmodifiableMap
    (
        new HashMap<String, Integer>()
            {{ 
                put("null", 0);
                put("false", 0);
                put("true", 1);
                put("numElems.lt", 2);
                put("NELT", 2);
                put("numElems.gt", 3);
                put("NEGT", 3);
            }}
    );

private int getCodeInt(Object code)
{
    if (code.getClass() == String.class)
    {
        return CONDS_MAP.get((String)code); // Null Exception here
    }
    else
    // (... etc etc)
}

谢谢!对不起,这太微不足道了......

2 个答案:

答案 0 :(得分:6)

最有可能的原因是尝试取消从不存在的密钥返回的null。

return CONDS_MAP.get((String)code);

相同
return CONDS_MAP.get(code).intValue();

如果Map返回null,则最后intValue将失败。

答案 1 :(得分:0)

是的,它已被初始化,nullpointerexception可能是由一个空键引起的。