DEV Community

Paula Santana
Paula Santana

Posted on

Java Efetivo Essencial - Imutabilidade

Reduza a mutabilidade das classes ao minimo

Esta é uma série baseada no entendimento de tópicos relacionados ao livro com foco no resumo.

Imutabilidade

Uma classe que não permite que suas instâncias sejam modificadas é considerada uma classe imutável. Ou seja, cada informação contida em um objeto durante seu ciclo de vida não é modificado.
Existe uma facilidade em projetar, implementar e utilizar classes IMUTÁVEIS, além de promover uma maior segurança e evitar muitos erros decorrente da alterações de objetos durante seu ciclo de vida.

Receita para classe Imutável

1 - Não forneça métodos que modifiquem o estado do objeto(mais conhecido como setters);
2 - Garanta que a classe não possa ser extendida(quando tornamos a classe final);
3 - Faça com que os campos/atributos sejam finais e privados;
4 - Não deixe que campos/atributos mutáveis sejam acessados por suas referências;

Na prática

Image description

Image description

Como Resolver
No caso anterior podemos realizar cópias defensivas, para gerarmos uma nova referência e não expor a referência que esta no objeto.

public Servico getServico() {
        Servico servicoRetorno = new Servico();
        return BeanUtils
           .copyProperties(servicoRetorno, servico);
}
Enter fullscreen mode Exit fullscreen mode

Mais sobre

Os objetos imutáveis são thread-safe, não exigem sincronização, o que é muito posivito em cenários de paralelismo, ou seja, quando várias threads acessam o mesmo objeto simultâneamente.
É interessante também que essas classes podem implementar o método static factory e reutilizar instâncias existentes da mesma classe.

Vantagens

Os objetos imutáveis são ótimos para construir novos objetos. Pois garantimos que esse objeto não mudará.
Os objetos imutáveis fornecem atomicidade de falha de graça,pois o estado nunca muda, o que evita inconsistências geradas por mudanças no estado do objeto.

Desvantagens

Porém uma desvantagem é que muitas vezes quando precisamos fazer modificações do objeto, por ser imutável precisamos gerar cópia dele e por isso em cenários onde temos que realizar multiplas vezes alterações precisaremos gerar muitas cópias e isso dependendo do volume de objetos ser um ponto de atenção em relação a performance.

Finalizando

Nem sempre conseguimos garantir que a classe seja 100% imutável, mas restringirmos a mutabilidade pode ser uma boa abordagem.
Evite a criação de setters a menos que haja necessidade.
Em classes imutáveis precisamos garantir que os construtores recebam todas as informações para construir o objeto.

Top comments (0)