如果 NullPointerException
发生在以下代码的 System.out.println(keys.nextElement().contains("Test"));
行,则是什么可能的原因是什么?
private void print(Map<String, String> map) {
Enumeration<String> keys = Collections.enumeration(map.keySet());
while(keys.hasMoreElements()) {
System.out.println(keys.nextElement().contains("Test"));
}
}
最佳答案
背景信息:HashMap
允许 null
键 ( javadoc )。 HashTable
没有,但它的使用速度(可能)也较慢,因为它是线程同步的。因此,我建议您需要考虑代码中 null
键的可能性,要么避免将它们放入将传递给 print
的映射中,要么更改 print
来处理它们。
您可以使用以下代码实现它:
private void test() {
Map<String, String> m = new HashMap<>();
m.put(null, "Anything");
print(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);
}
}
然后您将看到异常是由哪一行触发的。
关于java - `keys.nextElement().contains()` 上可能出现 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130422/