Что произойдет при попытке изменить неизменяемую коллекцию (unmodifiable collection) в Java?

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

Ответ

Будет выброшено непроверяемое исключение UnsupportedOperationException.

Пример:

List<String> originalList = new ArrayList<>(Arrays.asList("A", "B"));
List<String> unmodifiableList = Collections.unmodifiableList(originalList);

unmodifiableList.add("C"); // Выбросит UnsupportedOperationException
unmodifiableList.set(0, "Z"); // Выбросит UnsupportedOperationException
unmodifiableList.remove(0); // Выбросит UnsupportedOperationException

Как это работает:

  1. Методы типа Collections.unmodifiableList(), List.of(), Set.copyOf() возвращают представление или специальную коллекцию, которая блокирует операции модификации.
  2. Это runtime-защита, а не compile-time.
  3. Важно: Изменение исходной (обернутой) коллекции отразится на неизменяемом представлении.
    originalList.add("C"); // Это сработает
    System.out.println(unmodifiableList); // Выведет: [A, B, C]

    Используйте такие коллекции для безопасной передачи данных без риска их изменения извне.