Final no parametro de um método

6 respostas
afamorim

Galera, quando colocamos no parametro de um método “final” quais ganhos podemos ter, alem de garatir claro que aquele valor não poderá ser modificado dentro do método?

ex:

public metodo(final Integer parametro){
...
}

te mais.

6 Respostas

dicabeca

cara essa de vantagem é muito relativo,depende da regra de negocio de cada um,final so q dizer q é uma constante ou seja o valor nao muda,esse parametro ai deve receber algo q fique fora do objeto(statico)como uma referencia por exemplo !!!

T

afamorim:
Galera, quando colocamos no parâmetro de um método “final” quais ganhos podemos ter, além de garantir claro que aquele valor não poderá ser modificado dentro do método?

ex:

public void metodo(final Integer parametro){
...
}

te mais.

A vantagem é que isso costuma eliminar alguns erros de lógica que costumamos cometer em programas, do tipo:

public void metodo(final String x){
    x = "teste";  // erro de compilação
}
...
String q = "bla ble bli";
var.metodo (q);
System.out.println (q); // deve ser impresso "bla ble bli", não "teste".

Eu perguntei para um gerente de projetos que forçou os seus programadores a usar sempre final, e ele disse que isso eliminou uma série de erros estúpidos e tolos que os programadores faziam (do tipo “reaproveitar variáveis” ou “achar que os métodos podiam modificar os seus parâmetros por referência”).

peczenyj

Thingol, se me permite, vou fazer uma correção:

public class A{

   public void metodo(String x){ x= "teste" ; }
   public static void main (String []xxx){
       String q = "vatapa";
       A a = new A();
       a.metodo(q);
       System.out.println(q);
   }
}

Ainda imprime vatapa.

T

Sim senhor, mas é mais fácil forçar aquele programador meia-boca a botar “final” em todos os parâmetros que fazer entrar na cabeça que:

  • Strings são imutáveis;
  • Não ficar reutilizando variáveis e parâmetros sem saber por quê;
  • As referências são passadas por valor e não por referência (que é o caso que você mostrou aí).

Pondo “final” em todos os parâmetros evitamos ter de fazer o tal programador meia-boca a entender esses profundos conceitos da vida (sendo que eles não conseguem distinguir a mão esquerda da direita :stuck_out_tongue: )

LPJava

no exemplo citado, por si so Integer e String sao classes com o modificador final.
E a ideia tb de ter o uso do modificador final dentro do metodo cai no assunto de classe interna… que vc pode usar a variavel… e uma variavel no argumento ela é local… e variaveis locais so podem receber o modificador final além dele mais nenhum :D.

afamorim

Valeu galera, estava até lendo a matéria sobre Programação a prova de balas da Java Magazine desse mês e fala sobre isso, descobri que até método pode ser final, coisa que não lembrava mais, evitando assim que uma classe filha sobrescreva um método e evitando assim muitos problemas.

Realmente muito bom, só queria confirmar se teria ganho de performance, tipo não alocar mais memória que o necessário para um atributo.

Mais acho que não, é questão de segurança no código mesmo.

valeu ai todo mundo!!

Criado 3 de outubro de 2007
Ultima resposta 6 de out. de 2007
Respostas 6
Participantes 5