English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Cómo crear conjuntos inmutables en Java

Cada vez que se necesite definir un objeto que no pueda cambiar después de la inicialización, se puede definir un objeto inmutable. No hay reglas específicas para crear objetos inmutables, la idea es restringir el acceso a los campos de la clase después de la inicialización.

Set es una interfaz de la estructura de colección que no permite valores repetidos.

Al crear una colección inmutable, debe recordar lo siguiente:

  • No deberíamos poder agregar o eliminar elementos.

  • No deberíamos poder agregar valores nulos a una colección inmutable.

  • Una vez que se ha creado una colección inmutable, no se puede agregar o eliminar objetos de la misma, pero se puede modificar los objetos almacenados en ella.

Usar Java9método Of()

Java9El método of() acepta una lista de elementos, crea y devuelve una colección inmutable de elementos dados. Al usar este método, puede crear una colección inmutable en Java.

import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> set = Set.of(1458, 5548, 4587);
      System.out.println(set);
   }
}

Usar el método unmodifiableSet()

Este método acepta un objeto de colección como parámetro y devuelve su forma inmodificable o inmutable.

Llame a este método pasando el objeto necesario y obteniendo su forma inmutable.

Ejemplo

En el siguiente programa Java, creamos un objeto HashSet y lo convertimos a un objeto inmutable utilizando el método unmodifiableSet() e intentamos agregarle elementos.

Dado que lo hemos configurado como inmutable, se generará una excepción en tiempo de ejecución.

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> hashSet = new HashSet<Integer>();
      //Rellenar HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //Convertir el objeto set a un objeto inmutable
      Set immutable = Collections.unmodifiableSet(hashSet);
      immutable.add(4466);
   }
}

Resultado de salida

[1124, 3654, 9945, 7854]
Excepción en hilo "main" java.lang.UnsupportedOperationException
   en java.util.Collections$UnmodifiableCollection.add(Unknown Source)
   en MyPackage.ImmutableSet.main(ImmutableSet.java:19)