Этот пост продолжает мое исследование возможностей Java9 из моего блога My Top Java 9 Features . Здесь мы экспериментируем с методами статической фабрики коллекций Java9 в интерфейсах List, Set и Map.
Коллекции статических фабричных методов
Java9 облегчает создание неизменяемых списков, используя новые статические фабричные методы
Список и набор
Существует 12 методов Set.of и List.of —
- List.of () или Set.of ()
- List.of (E e1) или Set.of (E e1) для E e10
- List.of (E… elements) или Set.of (E… elements)
Примеры
1
2
3
|
jshell> Set.of() $ 1 ==> [] | created scratch variable $ 1 : Set<Object> |
Обратите внимание на вывод как объект List
К статическому
Список
из (E e1, E e2, E e3) —
1
2
3
|
jshell> List.of( "one" , "two" , "three" ) $ 2 ==> [one, two, three] | created scratch variable $ 2 : List<String> |
Обратите внимание на вывод как список
объект
Количество аргументов продолжает расти до E e10, после чего мы можем использовать vararg —
статический
Список
из (E… элементов)
карта
Точно так же Карта определяет —
- staticMapof ()
- staticMapof (K k1, V v1) — (K k10, V v10)
- staticMapofEntries (Map.Entry
… Записи) — обратите внимание на использование
Map.Entry
Примеры
1
2
3
4
5
6
|
jshell> Map.of() $ 12 ==> {} jshell> Map.of( "key1" , "value1" , "key2" , "value2" ) $ 13 ==> {key1=value1, key2=value2} | created scratch variable $ 13 : Map<String,String> |
Характеристика коллекций статических фабричных методов
Общие характеристики этих статических заводских методов: списки, наборы и карты —
- Структурно неизменный — создается исключение UnsupportedOperationException, хотя сами элементы являются неизменяемыми
1
2
3
4
5
6
|
jshell> Set<String> immutableSet = Set.of( "one" , "two" , "three" ) immutableSet ==> [three, two, one] | created variable immutableSet : Set<String> jshell> immutableSet.add( "four" ) | java.lang.UnsupportedOperationException thrown: |
- Нет пустых значений — выброшено исключение NullPointerException
01
02
03
04
05
06
07
08
09
10
|
jshell> List<Object> notNullList = List.of( null ) | Warning: | non-varargs call of varargs method with inexact argument type for last parameter; | cast to java.lang.Object for a varargs call | cast to java.lang.Object[] for a non-varargs call and to suppress this warning | List<Object> notNullList = List.of( null ); | ^--^ | java.lang.NullPointerException thrown: | at List.of (List.java: 1030 ) | at (# 10 : 1 ) |
- Сериализация — Сериализация, если элементы Сериализуемый
Список конкретных характеристик
- Порядок — Порядок поддерживается так же, как ввод элементов
1
2
3
|
jshell> List<String> immutableList = List.of( "one" , "two" , "three" ) immutableList ==> [one, two, three] | created variable immutableList : List<String> |
Задать конкретные характеристики
- Отклонить дубликаты — Набор также отклонит дубликаты во время создания с IllegalArgumentException —
1
2
|
jshell> Set.of( "one" , "one" ) | java.lang.IllegalArgumentException thrown: duplicate element: one |
Особенности карты
- Отклонить дубликат Keus — Карта отклонит дубликаты ключей с IllegalArgumentException —
1
2
3
4
5
|
jshell> Map.of( "key1" , "value1" , "key1" , "value2" ) | java.lang.IllegalArgumentException thrown: duplicate key: key1 | at ImmutableCollections$MapN.<init> (ImmutableCollections.java: 680 ) | at Map.of (Map.java: 1326 ) | at (# 15 : 1 ) |
- Итерация также не гарантируется
Выводы
Это полезный и быстрый метод для создания неизменяемых коллекций, а jshell предоставляет хороший полигон для изучения новых методов и связанных с ними характеристик.
Опубликовано на Java Code Geeks с разрешения Мартина Фаррелла, партнера нашей программы JCG . См. Оригинальную статью здесь: Примеры JShell Java9: Коллекции Статические Методы Фабрики
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |