NullPointerException in Map class



很久以前,我从我的前同事那里得到了为他工作的代码,但我不能使它工作。

使用调试器,我得出结论,我的类在这个方法有断点:

((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专家,所以我真的需要帮助。

基于您提供的有限信息,并假设它是准确的,唯一可能的方法1在这一点上可以抛出NullPointerException是如果metaDatanull

所以…

修改你的代码,在你认为抛出NPE的语句之前打印出metaData 的值;例如

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

如果输出显示metaDatanull,那么下一步是检查您的代码,找出为什么null。有可能你没有初始化它,或者你从其他地方传入它,那里也是null

如果输出显示metaData不是null,那么你在问题中陈述的事实/假设之一必须是不正确的。对于进一步的诊断,我们需要:

  • 真正的代码,复制和粘贴(不是键入像你似乎已经做了…),以及
  • 完成堆栈跟踪。

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

如果你想放入映射中的数据不是空的,在你放入之前,你的映射可能是空的,你会得到一个NullPointerException

相关内容

最新更新