Возможность NPE на `keys.nextElement (). Содержит ()` - PullRequest
0 голосов
/ 27 сентября 2019

Если 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"));
    }
}

1 Ответ

0 голосов
/ 27 сентября 2019

Справочная информация: 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);
        }
    }

тогда вы увидите, по какой строке вызывается исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...