提问人:CoolCoder 提问时间:11/12/2023 最后编辑:Rifat Rubayatul IslamCoolCoder 更新时间:11/17/2023 访问量:58
无法调用“java.util.Map.getOrDefault(Object, Object)”,因为 null
Cannot invoke "java.util.Map.getOrDefault(Object, Object)" because null
问:
我无法从字典中访问值。我正在使用
double storedDistances = dictionary.getOrDefault(lnglat, Double.POSITIVE_INFINITY)
如果在字典中找不到匹配项,则返回正无穷大。我认为错误来自返回的字典值,我该如何编写捕获来阻止 null 值被转发?具体错误是null
Cannot invoke "java.util.Map.getOrDefault(Object, Object)" because "Planner.dictionary" is null.
将不胜感激。
我希望返回一个双精度值,以便稍后与另一个双精度值进行比较。但是对于未分配的字典条目,将返回 null,这不能分配给双精度值。
答:
1赞
Hugh Granger
11/16/2023
#1
Cannot invoke "java.util.Map.getOrDefault(Object, Object)" because "Planner.dictionary" is null.
Java 抱怨字典是 ,而不是返回。每当 上调用方法时,Java 虚拟机都会抛出 s。这就是在这种情况下发生的事情。null
null
NullPointerException
null
1赞
Stephen C
11/16/2023
#2
我认为错误来自返回null的字典值
正确(可能......模制你令人困惑的术语)。它之所以发生,是因为变量的值为 。dictionary
null
(该变量不会“返回”任何内容。但是,如果您想说呼叫正在返回,那绝对是不正确的!getOrDefault
null
如何编写 catch 来阻止 null 值被结转?
你不应该那样做!!
相反,你应该首先找到导致什么......并解决这个问题。dictionary
null
如果存在是你期望发生的事情(即这是一个“正常”事件),那么你应该在使用它之前测试它;例如dictionary
null
double storedDistances;
if (dictionary != null) {
storedDistances = dictionary.getOrDefault(lnglat, Double.POSITIVE_INFINITY);
} else {
storedDistances = // some other value
}
(实际上,这也不是最好的方法,更好的主意是将字典
初始化为空映射而不是 null
。这样,你就不需要特殊情况代码来处理空字典了。但我偏离了轨道。
发现意想不到的 NPE 正在掩盖裂缝。您需要修复导致裂缝发生的原因,以免在您睡觉时墙壁掉落在您的头上。
我们无法告诉您为什么是“正常”或是否“正常”,因为您的问题没有包含足够的上下文。dictionary
null
评论
https://ericlippert.com/
)dictionary
null
NullPointerException
null