将数据放入null Map

时间:2012-08-14 13:00:35

标签: java collections map

我在Java中偶然发现了这个奇怪的事情。编码时我不小心忘了实例化地图。在将数据放入其中时,一切都没有错误,但是在获取它们时我得到了明显的NullPointerException。这是我使用的代码段:

public class Loader {
   private static Map<String, Object> map;
   public static load() {
       //...
       // read lines and put them into map
       map.put(line, new Object()); // <-- NO ERROR
       //...
   }

   public static parse(){
       //...
       for(...){
           map.get(key); //<-- ERROR on map (NullPointerException)
       }
       //...
   }
}

提供的代码是存根,主要目的是演示奇怪的地图行为。那么为什么可以将数据插入null呢? 我正在使用Java * 1.6.0_29 *。

请注意此代码已完成,地图未在其他任何地方初始化;代码已经完成。

5 个答案:

答案 0 :(得分:0)

简而言之,你不能这样做。我怀疑在map.put()期间抛出的异常是吞下而你却没有看到它。

e.g。

try {
    (new Loader).load();
}
catch (Exception e) {
   // swallowed with no info here
}

答案 1 :(得分:0)

此代码不完整......或者您正在运行代码的先前编译版本。

答案 2 :(得分:0)

我感到愚蠢。正如@assylias指出的那样,put发生的代码永远不会执行。每个周期都很深,因为之前的错误没有执行。我感到惭愧。

答案 3 :(得分:0)

这可能是您正在使用的IDE或JDK的问题,或者它可能是您的代码,因为当我尝试复制您的案例时,在编译时抛出了java.lang.Error异常,并带有该局部变量的消息地图未初始化。

答案 4 :(得分:0)

“map”实例化或“put”行无法访问。