Sobes.tech
Junior

Como é garantida a imutabilidade em Java?

sobes.tech IA

Resposta da IA

A imutabilidade em Java é garantida pelos seguintes métodos:

  1. Declarar a classe como final: A classe não pode ser herdada, o que impede a criação de subclasses mutáveis.

  2. Declarar todos os campos como final: O valor do campo só pode ser atribuído uma vez (durante a inicialização ou no construtor) e não pode ser alterado após a criação do objeto.

  3. Privacidade dos campos: Os campos devem ser privados (private) para evitar acesso direto e modificação dos valores de fora da classe.

  4. Ausência de setters ou métodos que alterem o estado do objeto: A classe não deve fornecer métodos públicos que possam modificar os valores dos campos após sua criação.

  5. Manejo correto de campos mutáveis: Se a classe contém referências a objetos mutáveis (por exemplo, List ou uma classe mutável própria), é necessário:

    • Criar cópias deles na inicialização (no construtor).
    • Retornar cópias nos getters para evitar modificar os estados internos do objeto de fora.
public final class ImmutableExample { // classe final

    private final String name; // campo final e privado

    private final List<String> items; // campo final e privado

    public ImmutableExample(String name, List<String> items) {
        this.name = name;
        // Criar uma cópia protegida da lista mutável
        this.items = new ArrayList<>(items);
    }

    public String getName() {
        return name;
    }

    public List<String> getItems() {
        // Retornar uma cópia protegida da lista mutável
        return Collections.unmodifiableList(new ArrayList<>(items));
    }

    // Ausência de setters ou métodos que alterem o estado
}

Exemplos de classes imutáveis embutidas em Java: String, classes wrapper de tipos primitivos (Integer, Long, etc.), BigInteger, BigDecimal.