如何查看地图中的内容?

时间:2013-06-11 09:05:16

标签: java

我在Java中遇到问题。 守则如下:

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

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

java.lang.NullPointerException

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

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

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

4 个答案:

答案 0 :(得分:5)

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

NPE的原因是,myIdmap的值为null,而您正尝试将其转换为原始int无法保存非空值)。将其更改为以下语句将避免异常(除非地图test本身为null

Integer value = (Integer ) test.get(myID);

答案 1 :(得分:2)

这里有多个问题:

  1. Map test可以是null
  2. 您无法从Object投射到int。您需要将其强制转换为Integer
  3. 我认为以下行不应该编译:

    int value = (int) test.get(myID);
    

    get()返回Object时,您正在尝试将其转换为原始int。即使你把它投到Integer

    int value = (Integer) test.get(myID); // assume auto-unwrapping here
    

    如果get(myID);null,则上述代码将抛出NPE。 你需要使用:

    Integer value = (Integer) test.get(myID); 
    

    您可以使用test.containsKey(myID)来检查密钥。最后做这样的事情:

    if(test!=null && test.containsKey(myID))
        Integer value = (Integer) test.get(myID);
    

    您应该在Map中使用Generics

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

然而,containsKey()方法可能应该是您所需要的。