1
resposta

Atributo final

Gostaria de saber se existe uma convenção ou boa pratica de usar final em todos os atriutos da minha classe? Se sim Por que? public class request{ private final String cpf; private final String rg; } `

1 resposta

Vamos lá...

Luis vou tentar responder sua pergunta abordando algumas coisas. Desde já peço desculpas se eu for repetitivo e falar alguma coisa que já seja óbvio pra você.

Java nos permite duas maneiras de criar uma variável e atribuir um valor a ela.

  • Declarar uma variável e atribuir um valor posteriormente.
  • Declarar uma variável e atribuir o valor na mesma instrução.

Utilizando a palavra reservada final ficaria assim:

public class Exemplo {
    final String NOME = "Luis";
    final long tempo;

    Exemplo() {
        this.tempo = System.currentTimeMillis();
    }
}

As duas formas vemos que quando marcamos uma variável como final, não podemos reatribuir seu valor.

Então quer dizer que variáveis finais são constantes?

Mais ou menos. Na realidade se o tipo da variável final for imutável sim, exemplos:

  • tipos primitivos;
  • String;
  • Outras.

Agora se o tipo da variável for mutável podemos alterar seu estado através de métodos disponíveis, exemplo:

public class OutroExemplo {
    private String nome;

    OutroExemplo(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}

public class Main {
    final static OutroExemplo outroExemplo = new OutroExemplo("Luis");

    public static void main(String[] args) {
        System.out.println(outroExemplo.getNome());
        outroExemplo.setNome("Alterando o valor");
        System.out.println(outroExemplo.getNome());
    }
}

Agora que ficou claro o uso da palavra reservada final para variáveis (lembrando que pode ser usada a nível de classe e métodos) vamos as considerações:

Convenção ou boa prática: Se você pensar em imutabilidade talvez isso possa fazer sentido. Todavia entendo que uma "convenção" não seja o caso. Programação funcional é um bom exemplo de uso da imutabilidade.

Com relação a boa prática, ao meu ver não é o caso. Objetos tem ESTADO e COMPORTAMENTO.

Alterar o estado de um objeto após sua criação é bem viável em projetos de OO.

No mais pra mim é discussão de bar. Espero ter ajudado e me desculpe se prolonguei demais.