Java 9 Factory методы в коллекциях
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 9. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
1. Введение
С приходом Java 9 создавать immutable коллекции намного проще. Ранее для этого приходилось писать что-то несуразное либо использовать сторонние библиотеки, теперь же поддержка пришла со стороны самого языка. Как это выглядит и с чем его едят сегодня мы и разберем.
2. List
Создание списка выглядит так
1 |
List<Integer> nums = List.of(1,2,3,4,5); |
Метод of() в интерфейсе List перегружен и принимает от одного до десяти элементов. Если хотим создать коллекцию с более чем десятью элементами, тогда будет использоваться перегруженный метод с varargs
1 |
static <E> List<E> of(E... elements) |
Сделано это с целью оптимизации, так как при каждом вызове метода c varargs будет создаваться новый массив
3. Set
Ситуация с Set схожа с List
1 |
Set<String> questions = Set.of("What?", "Where?", "When?"); |
Set также имеет перегруженные методы, но в отличии от List, если передать дубликат в метод of(), то получим исключение
1 |
Set<String> questions = Set.of("What?", "What?"); // IllegalArgumentException: duplicate element: What? |
4. Map
А вот Map-ы создаются немного интереснее
1 |
Map<String, String> params = Map.of("Name:", "John", "Surname:", "Snow", "Status:", "Unmarried"); |
Последовательности идут парами key, value. Всего таких пар может быть 10, в отличии от List и Set. Если в последовательности будут повторения ключей - получим исключение
1 |
Map.of("уникально", "наверняка", "уникально", "но это не точно"); // IllegalArgumentException: duplicate key: уникально |
5. Ограничения
- Вышеупомянутые коллекции нельзя изменить, при попытке получим UnsupportedOperationException;
- В метод of() нельзя передать null, во всех коллекциях получим NullPointerException;
- Метод of() не создает привычные ArrayList, HashSet или HashMap. В Java 9 были созданы специальные ImmutableCollections которые и возвращаются;
- ImmutableCollections являются сериализуемыми, если содержимое тоже является сериализуемым;
На этом статья заканчивается, но не новинки Java 9. Спасибо, что были с нами 🙂
Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.