0

我对 Java 中的地图有疑问。代码如下所示:

Map<Object, Object> test = myClass.getMap();
int value = (int) test.get(myID);

当我到达第二行时,我得到:

java.lang.NullPointerException

现在我问自己如何调试它并找到你为什么这不起作用?我很确定所有键和值都在这张地图中。

如何打印出整个地图,以便我可以搜索密钥是否可用?(地图很长)

或者找到问题的正确方法是什么?

4

4 回答 4

5

您可以map.containsKey(key)检查密钥是否存在

NPE 的原因是 was 中的值,myIdmapnull正试图将其转换为原始值int不能保存非空值)。将其更改为以下语句将避免异常(除非地图test本身是null

Integer value = (Integer ) test.get(myID);
于 2013-06-11T09:08:00.563 回答
2

这里有多个问题:

  1. Map test可能是null
  2. 你不能从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

于 2013-06-11T09:09:22.723 回答
0

使用带有集成调试器的 IDE:在映射实例化和初始化后的某处放置断点,并有效地查看映射内部的内容。

于 2013-06-11T09:09:05.833 回答
0

如果您想打印地图,那么回答您的问题:

for (Entry<Object, Object> entry : test.entrySet()) {
        System.out.println("Key:" + entry.getKey() + " Value:" + entry.getValue());
}

但是,该containsKey()方法可能应该是您更需要的。

于 2013-06-11T09:10:25.480 回答