List.of() ломается не в момент создания, а при первой мутации
List.of() возвращает неизменяемую реализацию — но это не проверяется на этапе компиляции. Код спокойно компилируется и работает, пока никто не пытается изменить список.
Ловушка появляется, когда список возвращает репозиторий или сервис, а вызывающий код где-то дальше по цепочке делает removeIf или add — это может быть редкая ветка, не покрытая тестами на happy path.
Ещё один нюанс: List.of() бросает NullPointerException, если среди элементов есть null — в отличие от Arrays.asList(), который null пропускает.
List tags = List.of("a", "b", "c");
tags.removeIf( t -> t.equals("a")); // UnsupportedOperationException
Что спросят следом: как безопасно передать immutable список туда, где возможна мутация (обернуть в new ArrayList<>(...) на границе), и чем List.copyOf() отличается от List.of() по поведению с null и уже immutable списками.
Ошибка не в вызове List.of() — она в предположении, что любой List можно мутировать где угодно.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки