java - `keys.nextElement().contains()` 上可能出现 NPE

标签 java

如果 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/

相关文章:

java - 无法运行自解压安装程序-无法访问jarfile C :\Users\Ray\AppData\Local\Temp\RarSFX0\install. jar

java - 在 AnyLogic 中模拟人口密度

java - 不支持使用 JDK 版本 `11.0.1` 构建。请安装 JDK 版本 `1.8.0`

java - Jsoup 将标签与列匹配

java - 您是否应该在每个 Intent 到达 android 中的实际 Activity 之前将其传递给每个 Intent

java - 为什么学习基类能力不好

java - junit-jupiter-api 和 junit-jupiter-engine 的区别

java - 安卓:Thread.sleep( ) 不工作

java - 获取任何文件的二进制值

java - 为框架构建自定义 Spring 配置标签