我在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 *。
请注意此代码已完成,地图未在其他任何地方初始化;代码已经完成。
答案 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”行无法访问。