Когда Map.keySet возвращает ноль - PullRequest
0 голосов
/ 07 мая 2018

Я читаю некоторый код, который проверяет, является ли значение, возвращаемое Map.keySet, null. Javadoc ничего не говорит о возвращаемом значении Map.keySet. Это пустой набор, если на карте ничего нет.

Когда значение, возвращаемое Map.keySet, может быть null?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Это определенно отсутствие понимания Map.keySet от автора кода, на который вы ссылаетесь. Как вы упомянули, в документе Java явно не указано, что метод keySet будет возвращать null.

В качестве примера я только что посмотрел на реализацию HashMap метода keySet, он определен как:

public Set<K> keySet() {
      Set<K> ks = keySet;
      if (ks == null) {
          ks = new KeySet();
          keySet = ks;
      }
      return ks;
}

Итак, как вы можете видеть, значение, возвращаемое методом, никогда не бывает нулевым.

Я также проверил несколько других реализаций метода keySet, например. для TreeMap, ConcurrentHashMap и др., но не удалось найти ничего, что могло бы вернуть ноль.

0 голосов
/ 07 мая 2018

Map.keySet никогда не должен возвращаться null.В документации подразумевается, что keySet никогда не должно быть null, поскольку его содержимое «отслеживает» содержимое Map:

Набор поддерживается картой, поэтому измененияна карту отражаются в наборе, и наоборот.

Этого было бы невозможно достичь, если бы keySet было разрешено возвращать null.

Стандартные реализацииMap в Java, HashMap и TreeMap, не возвращают null из keySet.Поскольку Map является интерфейсом, можно разработать неправильную реализацию, которая вернула null для keySet.Программирование для этой удаленной возможности не было бы хорошей идеей.

...