我对 Java 中的地图有疑问。代码如下所示:
Map<Object, Object> test = myClass.getMap();
int value = (int) test.get(myID);
当我到达第二行时,我得到:
java.lang.NullPointerException
现在我问自己如何调试它并找到你为什么这不起作用?我很确定所有键和值都在这张地图中。
如何打印出整个地图,以便我可以搜索密钥是否可用?(地图很长)
或者找到问题的正确方法是什么?
我对 Java 中的地图有疑问。代码如下所示:
Map<Object, Object> test = myClass.getMap();
int value = (int) test.get(myID);
当我到达第二行时,我得到:
java.lang.NullPointerException
现在我问自己如何调试它并找到你为什么这不起作用?我很确定所有键和值都在这张地图中。
如何打印出整个地图,以便我可以搜索密钥是否可用?(地图很长)
或者找到问题的正确方法是什么?
您可以map.containsKey(key)检查密钥是否存在
NPE 的原因是 was 中的值,myId而map您null正试图将其转换为原始值int(不能保存非空值)。将其更改为以下语句将避免异常(除非地图test本身是null)
Integer value = (Integer ) test.get(myID);
这里有多个问题:
Map test可能是null。Objectto 转换int。您需要将其转换为Integer.我相信下面的行不应该编译:
int value = (int) test.get(myID);
作为get()回报Object,您正试图将其转换为原始int。即使您将其转换为Integer:
int value = (Integer) test.get(myID); // assume auto-unwrapping here
get(myID);如果是,上面的代码将抛出 NPE null。您需要使用:
Integer value = (Integer) test.get(myID);
您可以使用test.containsKey(myID), 来检查密钥。最后做这样的事情:
if(test!=null && test.containsKey(myID))
Integer value = (Integer) test.get(myID);
你应该在你的虽然使用泛型。Map
使用带有集成调试器的 IDE:在映射实例化和初始化后的某处放置断点,并有效地查看映射内部的内容。
如果您想打印地图,那么回答您的问题:
for (Entry<Object, Object> entry : test.entrySet()) {
System.out.println("Key:" + entry.getKey() + " Value:" + entry.getValue());
}
但是,该containsKey()方法可能应该是您更需要的。