Где в Java до сих пор может встречаться интерфейс Enumeration?

«Где в Java до сих пор может встречаться интерфейс Enumeration?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Enumeration — это устаревший (legacy) интерфейс для итерации по элементам коллекций. В современном коде его заменил Iterator, но он может встречаться в следующих случаях:

  1. Работа с устаревшими API и коллекциями:

    • Vector, Hashtable, Stack, Dictionary.
      Vector<String> vec = new Vector<>();
      Enumeration<String> en = vec.elements();
      while (en.hasMoreElements()) {
      System.out.println(en.nextElement());
      }
  2. Некоторые API Java EE / Jakarta EE и сервлетов:

    Enumeration<String> headerNames = request.getHeaderNames();
    Enumeration<String> initParams = servletContext.getInitParameterNames();
  3. Совместимость со старым кодом (legacy systems).

Недостатки по сравнению с Iterator:

  • Отсутствует метод remove() для удаления элемента во время итерации.
  • Более длинный и менее удобный синтаксис (hasMoreElements()/nextElement() vs hasNext()/next()).

Рекомендация: В новом коде всегда используйте Iterator или цикл for-each. Для конвертации Enumeration в современные структуры можно использовать Collections.list():

List<String> list = Collections.list(enumeration);