Sobes.tech
Junior

O que são objetos imutáveis?

sobes.tech IA

Resposta da IA

Objetos cujo estado não pode ser alterado após a criação. Ao tentar modificar, um novo objeto é sempre criado.

Exemplos de classes imutáveis em Java:

  • String
  • Wrappers primitivos (Integer, Long, Boolean, etc.)
  • Algumas coleções (Collections.unmodifiableList(), ImmutableList do Guava)

Vantagens:

  • Segurança em threads (não requerem sincronização em acessos concorrentes).
  • Facilidade de uso (fácil entender o estado do objeto).
  • Podem ser usados como chaves em HashMap ou elementos em Set (seu hashCode e equals() não mudam).
  • Melhoram o desempenho através de cache e reutilização.

Desvantagens:

  • Criar um novo objeto a cada modificação pode ser ineficiente para mudanças frequentes.

Criação própria:

  • Declarar a classe como final.
  • Declarar todos os campos como privados e final.
  • Não fornecer métodos setters.
  • Nos getters de campos mutáveis, retornar cópias em vez de referências aos objetos originais.
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;
        // Criar uma cópia para evitar alterações externas
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Retornar uma lista não modificável
        return Collections.unmodifiableList(hobbies);
    }
}