Set.of() в Java нельзя добавить дубликаты и null?Когда используешь
Set.of(...), можно столкнуться с двумя неожиданностями:1. ❌ Нельзя добавлять дубликаты
2. ❌ Нельзя добавлять
nullРазбираемся, почему так:
🔐
Set.of(...) — это immutable SetМетод
Set.of(...), добавленный в Java 9, создаёт неизменяемое множество. Это значит:* После создания ты не можешь изменить его (добавить, удалить элемент).
* Все элементы внутри должны быть уникальны и не должны быть
null.📛 Почему нельзя дубликаты?
Потому что
Set по определению — это коллекция уникальных элементов.А
Set.of(...) бросает IllegalArgumentException, сразу во время создания, если переданы дубликаты:
Set.of("a", "b", "a"); // 💥 Бросит исключение!
Это сделано для того, чтобы не было тихих ошибок — чтобы ты сразу увидел, что передал неуникальные значения.
🕳️ Почему нельзя
null?Set.of(...) не принимает null, потому что он реализован через внутренние immutable структуры, которые не допускают null`-значений. При попытке добавить `null получишь NullPointerException.
Set.of("a", null); // 💥 NullPointerException
Это сделано сознательно —
null может вести к неочевидным багам и плохо сочетается с концепцией неизменяемых коллекций.👀 Хочешь изменяемый
Set, который принимает null и дубликаты фильтрует сам? Используй HashSet:
Set<String> set = new HashSet<>();
set.add(null); // ✅ Можно
👉@BookJava
