Map类中的NullPointerException

时间:2013-04-28 10:49:37

标签: java map nullpointerexception

很久以前,我从我的前同事那里获得了代码,但是我无法使其工作。

使用调试器我得出结论,我的课程在这个方法上有突破点:

((Map<String, List<byte[]>>)metaData).put(HEADERELEMENTS, headerOMElements); 

put方法已声明 - String key, List <byte[]> value。我也试过

((Map<String, List<byte]>>)metaData).put("HEADERELEMENTS",headerOMElements);

但情况是一样的。我的printStackTrace会返回NullPointerException。 我记录了headerElements

number of headerOMElements (headerOMElements.size();)=1
headers are(before calling the method PUT) (headerOMElements.toString();): [[B@d000d]

如何确定问题并解决问题?我不是高级Java专家,所以我真的需要帮助。

2 个答案:

答案 0 :(得分:3)

根据您提供的有限信息,并假设它是准确的, 1 唯一可能的方式是NullPointerException可以抛出那个metaData }是null

所以......

修改您的代码,以便在您认为正在抛出NPE的语句之前立即打印出metaData 的值; e.g。

System.err.println("metaData is " + metaData);

如果输出显示metaDatanull,则下一步是检查您的代码以确定原因它是null。您可能没有初始化它,或者您已经从其他地方传递了它,它也是null

如果输出显示metaData不是null,那么您在问题中陈述的事实/假设之一必须是错误的。为了进一步诊断,我们需要:

  • 真实的代码,复制并粘贴(不是像您似乎已经完成的那样输入...基于拼写错误),
  • 完整的堆栈跟踪。

1 - 对于某些类型的Map,如果密钥为null,您还可以获得NPE。但是,该异常将在put()方法调用中抛出。此外,当您使用文字字符串作为键时,您说您遇到了同样的问题。所以这不能解释。唯一可能的解释是,有多个线程在没有同步的情况下更新地图。这可能是NPE(随机),但NPE将在putMap实例的其他方法中。

答案 1 :(得分:1)

如果您要放入地图的数据不是null,则在放入之前,您的地图可能为空,并且您会收到NullPointerException。

OR 在其他任何地方抛出异常。