通常,如果我事先知道地图的所有键,我会像这样实例化它:
List<String> someKeyList = getSomeList();
Map<String, Object> someMap = new HashMap<String, Object>(someKeyList.size());
for (String key : someKeyList) {
someMap.put(key, null);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法直接这样做而不需要遍历列表?有效的东西:
new HashMap<String, Object>(someKeyList)
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是直接编辑地图的键集,但不支持该操作.还有其他方式我可以俯瞰吗?
我通过Sonarqube在我们的代码上运行findbugs,我得到一个空指针取消引用的错误:
有一个语句分支,如果执行,则保证将取消引用空值.
错误的代码就是这样:
public static boolean isBigDecimalDifferent(BigDecimal x, BigDecimal y) {
return (x != null || y != null)
&& ((x != null && y == null) || (x == null && y != null) || x.compareTo(y) != 0);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是怎么可能的.唯一可以实现NPE的地方是调用x.compareTo(y),但如果x = null,那么Java永远不会分析那个分支,对吗?
这是一个错误,还是我错过了Java分析这个语句的方式?
UPDATE
感谢您的投入.我最后建议他们改变它:
if (x!=null && y != null)
return x.compare(y);
else
return x!=y;
Run Code Online (Sandbox Code Playgroud)
我觉得有点清楚.如果没有人同意这个改变,我会按照建议做,只是忽略这个问题,即使我宁愿避免这个.