Статьи

Примеры JShell в Java 9: ​​статические фабричные методы коллекций

Этот пост продолжает мое исследование возможностей 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, являются их собственными.