Ref.: final como argumento

9 respostas
P

Bom dia a todos.

Feliz dia do TRABALHADOR!


      Irmãos, é certo usar esse tipo de coisa?
public Usuario(final Integer intMatriculaChv, final Connection cnnConexao) {
    }

9 Respostas

thundercas

Depende de sua necessidade prsantos. Neste caso, as variáveis recebidas como argumento nunca poderão ser alteradas. A sintaxe está correta.

Abraços

P

Mas não consegui ver isso em nenhuma classe do JAVA.

Alguém pode me dizer se existe alguma delas com esse tipo de coisa?

Obrigado.

PadrE

Olha… se existe não sei…

Mas você pode usar conforme necessite. Se bem que uma necessidade dessas eh bem dificil…

Mas vamos imaginar o seguinte:
Você cria uma classe abstrata que possui um determinado objeto privado como atributo. Bom… como toda classe abstrata você implementa alguns métodos e deixa outros por conta das classes mais especificas (as concretas).

Até aqui blza… agora surge a seguinte necessidade (não consegui imaginar uma situação real)…

Você cira um método abstrato que recebe seu atributo como parâmetro, mas quem vai implementar esse método será as classes filhas… o que é um risco, pois que elas podem alterar o estado do seu Objeto. Isso não pode ocorrer porque você possui outros métodos privados que utilizam o mesmo objeto, e algumas alteração inesperada pode prejudicá-los.

O que você faz???

public abstract void seiLa(final Objeto obj);

E pronto… quem implementar pode ver o seu atributo privado, mas em nenhum momento poderá modificar seu estado.

Fui !

rodrigo_gomes

o modificador final não impede que se altere o estado de um objeto. Ele apenas impede que esse objeto receba uma nova instancia/referencia.

falcomarcio

Cara pode usar isso sim mas as variáveis nunca poderão ser alteradas, vai preservar o conteúdo das variáveis com final

victorwss

Isso é raro ser necessário e é raro de se encontrar por aí, mas existe.

O caso mais típico é quando o parâmetro (ou outra variável local) precisa ser acessada por uma classe local ou por uma classe anônima dentro do método que a contém, uma vez que o compilador emite um erro se a variável não for final.

fpavao

Se vc passa uma referencia sem ser final, vc pode aponta-la para outro lugar dentro do método, o que prejudica a compreensão do código e pode causar bugs, por isto alguns lugares mencionam o final nos parametros como boa prática, na minha opinião é útil sim !!!

P

Pois é!

Preferi usar desta forma.

Assim tenho a certeza que o que foi passado como parâmetro, não terá seu valor anterado.

Valeu pelas dicas.

Continuarei fazendo assim.

PadrE

Puts… eh verdade… viajei no post ! Vc so nao vai perder a referência…

Criado 1 de maio de 2008
Ultima resposta 1 de mai. de 2008
Respostas 9
Participantes 7