En el último tutorial, aprendimos cómo crear listas inmutables con facilidad usando los métodos de fábrica introducidos en Java 9. En esta guía, veremos el uso de métodos de fábrica recién introducidos para crear conjuntos inmutables.
1. Creación de un conjunto inmutable antes de Java 9
Antes de discutir cómo usar los métodos de fábrica para crear conjuntos inmutables, veamos cómo solíamos crear conjuntos inmutables antes de Java 9.
1.1 Creando un conjunto inmutable vacío antes de java SE 9
Antes de Java 9, tenemos que usar unmodifiableSet () de la clase Colecciones para crear un conjunto inmutable. En el siguiente ejemplo, estamos creando un conjunto vacío.
Set<String> emptyHashSet = new HashSet<String>(); Set<String> immutableHSet = Collections.unmodifiableSet(emptyHashSet);
Probemos este código en JShell (una nueva herramienta introducida en Java 9)
1.2 Creación de un conjunto inmutable no vacío antes de Java SE 9
Así es como creamos conjuntos inmutables no vacíos antes de Java 9. Como puede ver, tenemos que escribir varias líneas de código para que funcione. En Java 9 podemos escribir este código en una línea, lo veremos en la siguiente sección.
Set<String> hset = new HashSet<String>();
hset.add("Jon Snow");
hset.add("Khal Drogo");
hset.add("Daenerys");
Set<String> immutableSet = Collections.unmodifiableSet(hset);
2. Java 9: creación de un conjunto inmutable utilizando el método de fábrica estática de ()
Java 9 introdujo un par de versiones del método of () para crear conjuntos inmutables.
static <E> Set<E> of()
2.1 Java 9: creación de un conjunto inmutable vacío
Set<String> immutableSet = Set.of();
2.2 Java 9: creación de un conjunto inmutable no vacío
Como puede ver, lo simple que es crear un conjunto inmutable en Java 9.
Set<String> immutableSet = Set.of("Apple", "Banana", "Orange");
3. ¿Qué es un conjunto inmutable?
1. Un conjunto inmutable no permite que sus elementos se agreguen, eliminen y actualicen, si intentamos hacerlo, obtendremos una UnsupportedOperationException. Tomemos un ejemplo para ver esto.
jshell> Set immutableSet = Set.of("Paul", "Lora", "Steve"); immutableSet ==> [Paul, Lora, Steve] jshell> immutableSet.add("Harry") | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableSet.add (ImmutableCollections.java:281) | at (#2:1)
2. No podemos agregar elementos nulos a un Conjunto inmutable.
jshell> Set immutableSet = Set.of("Paul", "Lora", "Steve"); immutableSet ==> [Lora, Steve, Paul] jshell> immutableSet.add(null) | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableSet.add (ImmutableCollections.java:281) | at (#2:1)