Sobes.tech
Junior

¿Qué son los objetos inmutables?

sobes.tech AI

Respuesta de la IA

Objetos cuyo estado no puede ser modificado después de su creación. Al intentar modificarlos, siempre se crea un nuevo objeto.

Ejemplos de clases inmutables en Java:

  • String
  • Envoltorios primitivos (Integer, Long, Boolean, etc.)
  • Algunas colecciones (Collections.unmodifiableList(), ImmutableList de Guava)

Ventajas:

  • Seguridad en hilos (no requieren sincronización en acceso concurrente).
  • Facilidad de uso (fácil de entender el estado del objeto).
  • Pueden usarse como claves en HashMap o elementos en Set (su hashCode y equals() no cambian).
  • Mejoran el rendimiento mediante caché y reutilización.

Desventajas:

  • Crear un nuevo objeto en cada modificación puede ser ineficiente para cambios frecuentes.

Creación propia:

  • Declarar la clase como final.
  • Declarar todos los campos como privados y final.
  • No proporcionar métodos setters.
  • En los getters para campos mutables, devolver copias en lugar de referencias a los objetos originales.
public final class ImmutablePerson {
    private final String name;
    private final int age;
    private final List<String> hobbies;

    public ImmutablePerson(String name, int age, List<String> hobbies) {
        this.name = name;
        this.age = age;
        // Crear una copia para evitar cambios externos
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Devolver una lista inmutable
        return Collections.unmodifiableList(hobbies);
    }
}