2011-09-23 90 views
1

這是凌晨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) 
} 

謝謝!對不起,它太瑣碎了......

+1

不相關,但儘量避免使用雙括號HashMap初始化器,並且'code.getClass()== String.class'應該是'code instanceof String'(更容易閱讀,鍵入更快,避免可能的NPE)。 – Thilo

+0

@Thilo - 實例初始值設定項有什麼問題? –

+0

@Ted:它創建一個(不必要的)HashMap的子類。 – Thilo

回答

6

這很可能是由於嘗試解開從不存在的鍵返回的空值造成的。

return CONDS_MAP.get((String)code); 

相同

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

,如果地圖返回null最後intValue將失敗。

+0

我可以發誓,我把點放在那個JSON中......但是,代碼是「numElemsgt」。謝謝。睡覺可能有幫助。我也會檢查空值。 – huff

+0

聽起來像枚舉或字符串常量的好例子。 – Thilo

+0

不同的字符串應該返回相同的int。 (我會更新示例) – huff

0

是的,它已經被初始化,nullpointerexception可能是由null鍵造成的。

+0

空鍵是否會導致NullPointerException? – Thilo

+2

如果'code'爲空,那麼NPE將在'if'測試中。 –

+0

@Thilo是根據文檔 - http://download.oracle.com/javase/6/docs/api/java/util/Map.html#get%28java.lang.Object%29 –