Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpCoUm 216 of 322 menu
◀ ▶

Обертки только для чтения в Java

Класс Collections умеет оборачивать список, множество или карту в представление только для чтения. Снаружи видны те же элементы, но методы изменения бросают UnsupportedOperationException.

Важно отличать это от List.of и Map.copyOf: обертка смотрит на исходную коллекцию. Если изменить оригинал, содержимое обертки тоже сдвинется.

Список отдают наружу, а внутри продолжают править оригинал:

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<String> inner = new ArrayList<>(List.of("one")); List<String> view = Collections.unmodifiableList(inner); System.out.println(view); inner.add("two"); System.out.println(view); } }

После inner.add обертка показывает два элемента, хотя сама не менялась. Для карт и множеств есть unmodifiableMap, unmodifiableSet и однотипные методы для отдельных представлений keySet.

С Java 10 появились методы List.copyOf, Set.copyOf, Map.copyOf: они делают снимок и не следят за исходником. Выбор такой: нужна живая связь с оригиналом - обертка Collections, нужен зафиксированный снимок - copyOf.

Создайте изменяемый список, оберните его, добавьте элемент в оригинал и выведите размер обертки до и после.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить