我知道这个问题已被问过几次,但我没有找到任何正确的答案。当您从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个多小时试图调试这个。虽然我在网上看到很多帖子,但我还不清楚可以做些什么来避免它。
答案 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。