Java 'keys.nextElement()包含()上NPE的可能性`
如果Java 'keys.nextElement()包含()上NPE的可能性`,java,Java,如果System.out.println(keys.nextElement().contains(“Test”))行上发生NullPointerException以下代码中,可能的原因是什么 private void打印(地图){ 枚举键=Collections.Enumeration(map.keySet()); while(keys.hasMoreElements()){ System.out.println(keys.nextElement()包含(“Test”); } } 背景信息:Ha
System.out.println(keys.nextElement().contains(“Test”))行上发生NullPointerException
代码>以下代码中,可能的原因是什么
private void打印(地图){
枚举键=Collections.Enumeration(map.keySet());
while(keys.hasMoreElements()){
System.out.println(keys.nextElement()包含(“Test”);
}
}
背景信息:HashMap
允许null
键()HashTable
没有,但由于它是线程同步的,所以使用起来也(可能)较慢。因此,我建议您需要考虑代码中null
键的可能性,或者避免将它们放在将传递给print
的映射中,或者更改print
来处理它们
您可以使用以下代码实现这一点:
private void test() {
Map<String, String> m = new HashMap<>();
m.put(null, "Anything");
print(m);
}
private void test(){
Map m=新的HashMap();
m、 放(空,“任何”);
印刷品(m);
}
如果您可以运行调试器,那么就可以清楚地知道是哪个调用提供了NPE,如果不是,那么像这样拆分表达式有时会很有用
private void print(Map<String, String> map) {
Enumeration<String> keys = Collections.enumeration(map.keySet());
while (keys.hasMoreElements()) {
String nextElement = keys.nextElement();
boolean contains = nextElement.contains("Test");
System.out.println(contains);
}
}
private void打印(地图){
枚举键=Collections.Enumeration(map.keySet());
while(keys.hasMoreElements()){
字符串nextElement=keys.nextElement();
boolean contains=nextElement.contains(“测试”);
System.out.println(包含);
}
}
然后,您将看到触发异常的行。键。nextElement()
可能为null要添加到上述注释中,hasMoreElements()
告诉您是否存在下一个元素,但下一个元素可能为null
本身。您要传递给Map的数据是什么?请检查Map.containsKey(null)
-它表示map.put.Unknown上有一个bug IMHO,但日志表明这一行出现了NPE。为什么不在循环时用if条件检查null呢?我不知道HashMap
允许null键和键。hasMoreElements()
是真的。。。非常感谢。