Неизменяемые фабрики коллекций в Java
С Java 9 методы List.of, Set.of и
Map.of возвращают компактные неизменяемые
коллекции. Любая попытка add, remove
или put завершится исключением
UnsupportedOperationException.
Такие коллекции удобно отдавать наружу из метода: вызывающий код видит фиксированный набор данных и не ломает внутреннее состояние программы.
Небольшой набор констант и карта настроек:
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<String> roles = List.of("guest", "user", "admin");
Set<Integer> ports = Set.of(80, 443);
Map<String, Integer> limits = Map.of("free", 10, "pro", 100);
System.out.println(roles.size());
System.out.println(ports.contains(443));
System.out.println(limits.get("pro"));
}
}
У Map.of есть ограничение: не больше десяти
пар в одном вызове. Больше пар собирают через
Map.ofEntries или копию из изменяемой карты
методом Map.copyOf (Java 10):
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> draft = new HashMap<>();
draft.put("a", 1);
draft.put("b", 2);
Map<String, Integer> frozen = Map.copyOf(draft);
System.out.println(frozen);
}
}
List.copyOf и Set.copyOf работают так
же: если исходная коллекция уже неизменяемая, может
вернуться тот же экземпляр без лишнего копирования.
Создайте неизменяемый список из трех городов и
проверьте, что add приводит к исключению
(поймайте его или опишите ожидаемый тип в комментарии).