来自Actions actions = new Actions(driver);
WebElement element = driver.findElement(By.linkText("host"));
actions.moveToElement(element).build().perform();
的Java文档
返回指定键所映射的值;如果返回,则返回null 该映射不包含密钥的映射。
但是以下代码抛出了Map
。
Null Pointer exception
有人可以帮助我了解这种行为吗?
答案 0 :(得分:9)
这里的问题不在于哈希图,而在于将结果自动拆箱为原始布尔值。
使用:
Map<String, Boolean> map = new HashMap<>();
Boolean r = map.get("a");
请注意,r
是一个“大b” Boolean
包装对象,而不是原始的boolean
。
正如MadaManu
所指出的那样,请注意r
可以是null
,这对于您的代码读者来说可能是非常令人惊讶的。您可能想使用:
Map<String, Boolean> map = new HashMap<>();
boolean r = map.getOrDefault("a", false);
...如果希望将丢失的密钥与false
相同。
答案 1 :(得分:4)
get
返回null
,因为映射为空。尝试将{“ unbox”)null转换为原始布尔值以使三元表达式具有与NullPointerException
对齐的原始布尔值时,发生false
。
甚至从未尝试进行分配,因此这无关紧要。
答案 2 :(得分:1)
来自JLS 5.1.8. Unboxing Conversion
如果r为null,则取消装箱转换将引发NullPointerException
在您的情况下,map.get("a")
返回null,然后取消装箱将引发此异常。
您可以使用布尔值来解决:
Boolean r = map.get("a");
// here r will be null.