使用ConcurrentHashMap避免nullpointer异常

时间:2013-09-11 08:30:36

标签: java nullpointerexception

我知道这个问题已被问过几次,但我没有找到任何正确的答案。当您从ConcurrentHashMap获取结果时,如何避免抛出NullPointerException。我有下面的代码,它给我一个NullPointer。

public static String getPersonInfo(String personAddress) {
    //if(concMap!=null && concMap.containsKey(personAddress))       
    return concMap.get(personAddress);  
            //return null;  
}

在并发hashmap中,我将人员ID和地址存储在并发hashmap中。在少数情况下,id为null。虽然我在将数据放入地图之前进行了空检查,但在尝试读取数据时仍然会出现以下错误。

java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(Unknown Source)

有人请帮忙:(我已经浪费了3个多小时试图调试这个。虽然我在网上看到很多帖子,但我还不清楚可以做些什么来避免它。

5 个答案:

答案 0 :(得分:5)

对personAddress执行null检查,调用get(null)会抛出NPE。 它甚至在方法documentation

中指定

答案 1 :(得分:3)

是null,在这种情况下是personAddress(正如大家所说)。但是,检查它们是最安全的:

public static String getPersonInfo(String personAddress) {
  if (personAddress != null && concMap != null && concMap.containsKey(personAddress)) {       
    return concMap.get(personAddress);
  }
  return null;
}

我应该补充一点,除了原语之外几乎所有东西都是null的能力是Java中常见的问题。大多数内部方法甚至都不打算处理它而只是抛出NPE。如果事情不能在路上无效,请在第一个有意义的机会检查这一点。

答案 2 :(得分:1)

这是不可能的。 API状态,如果密钥为null,则此方法仅抛出NPE。您应该使用调试器,在某处您不执行null检查。我也不明白,为什么你发布了带注释的代码。那是什么意思?这是你的空检查吗?为什么要注释掉?

答案 3 :(得分:0)

尝试这样做以避免从地图中获取null键:

public static String getPersonInfo(String personAddress) {
    //if(concMap!=null && concMap.containsKey(personAddress))       
    return (personAddress != null) ? concMap.get(personAddress) : null;  
}

答案 4 :(得分:0)

如果您使用(或计划使用)Java ide的JetBrains Idea,您可以使用它们开发的一些特定注释。

基本上,你有@Nullable和@NotNull。