我对 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
。Object
to 转换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()
方法可能应该是您更需要的。